private static TResult GetOrAddSyntaxBuilder<TResult, T1, T2>(this IBuilderSyntax bindingSyntax) where T1 : class where TResult : IBindingInfoSyntax<T2> { if (bindingSyntax is TResult) return (TResult)bindingSyntax; IBindingBuilder builder = bindingSyntax.Builder; object syntaxBuilder; if (!builder.TryGetData(SyntaxBuilderConstant, out syntaxBuilder) || !(syntaxBuilder is TResult)) { syntaxBuilder = new SyntaxBuilder<T1, T2>(builder); builder.AddOrUpdate(SyntaxBuilderConstant, syntaxBuilder); } return (TResult)syntaxBuilder; }