当前位置: 首页 > 编程语言 > C#

不要在成员签名中嵌套generics类型分享

时间:2023-04-11 10:51:02 C#

C#学习教程:不要在成员签名中嵌套通用类型警告涵盖的代码包含在下面。我应该如何重构代码来解决CA1006警告?请记住,我对表达式树不是很熟悉,尽管我对匿名方法、委托和lambda非常熟悉。任何帮助将不胜感激。publicstaticDataServiceQueryExpand(thisDataServiceQuerysource,ExpressionpropertySelector){stringincludeString=BuildString(propertySelector);返回源.Expand(includeString);}privatestaticstringBuildString(ExpressionpropertySelector){switch(propertySelector.NodeType){caseExpressionType.Lambda:LambdaExpressionlambdaExpression=(LambdaExpression)propertySelector;返回BuildString(lambdaExpression.Body);caseExpressionType.Quote:UnaryExpressionunaryExpression=(UnaryExpression)propertySelector;返回BuildString(unaryExpression.Operand);caseExpressionType.MemberAccess:MemberExpressionmemberExpression=(MemberExpression)propertySelector;MemberInfopropertyInfo=memberExpression.Member;if(memberExpression.ExpressionisParameterExpression){returnpropertyInfo.Name;}else{//我们有一个嵌套属性(例如MyType.SomeProperty.SomeNestedProperty)returnBuildString(memberExpression.Expression)+"/"+propertyInfo.Name;}案例ExpressionType.Call:MethodCallExpressionmethodCallExpression=(MethodCallExpression)propertySelector;if(IsSubInclude(methodCallExpression.Method))//检查它是一个SubInclude调用{//参数0是应用SubInclude的表达式(这可能是成员访问或另一个SubInclude)//参数1是要应用的表达式获取包含的属性//将两者传递给BuildString以获得完整的表达式returnBuildString(methodCallExpression.Arguments[0])+"/"+BuildString(methodCallExpression.Arguments[1]);}//否则退出并抛出break;}thrownewInvalidOperationException("Expression必须是成员表达式或SubInclude调用:"+propertySelector.ToString());}privatestaticreadonlyMethodInfo[]SubIncludeMethods;静态MyExtensions(){类型type=typeof(MyExtensions);SubIncludeMethods=type.GetMethods().Where(mi=>mi.Name=="SubExpand").ToArray();}privatestaticboolIsSubInclude(MethodInfomethodInfo){如果(methodInfo.IsGenericMethod){如果(!methodInfo.IsGenericMethodDefinition){methodInfo=methodInfo.GetGenericMethodDefinition();}}返回SubIncludeMethods.Contains(methodInfo);}publicstaticTPropTypeSubExpand(thisCollectionsource,ExpressionpropertySelector)whereTSource:classwhereTPropType:class{thrownewInvalidOperationException("ThismethodisonlyforusewithDataServiceQueryExtensions.Expandtogenerateexpressionstrees");//没有实际使用它-只需要表达式!}publicstaticTPropTypeSubExpand(thisTSourcesource,ExpressionpropertySelector)whereTSource:classwhereTPropType:class{thrownewInvalidOperationException("ThismethodisonlyintendedforusewithDataServiceQueryExtensions.Expandtogenerateexpressionstrees");//没有实际使用它-只需要表达式!}警告是一般性警告,早在帮助您设计更好,更简单的公共接口在这种情况下,您会收到有关在方法中使用Expression>parameters的警告。但是,对于这种方法,简化类型没有意义,应该使用属性来抑制警告或从规则集中完全删除规则。一个愚蠢的例子,你可能应该考虑遵循规则的建议是这种方法:以上是C#学习教程:不要在成员签名中嵌套泛型类型如果它对每个人都有用并且需要了解更多有关C#的信息,我将分享所有内容学习教程,希望大家多多关注——publicvoidF(Dictionary>>dictionary);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢