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

GetPropertyreflection导致新属性“模糊匹配”share

时间:2023-04-10 23:54:42 C#

GetPropertyreflection导致新属性“模糊匹配”如何获取我的属性?CurrentlyAmbiguousmatchfound歧义匹配发现错误,请参阅代码中的注释行。公共类MyBaseEntity{公共MyBaseEntityMyEntity{得到;放;}}publicclassMyDerivedEntity:MyBaseEntity{publicnewMyDerivedEntityMyEntity{get;放;PropertyInfopropInfoSrcObj=myDE.GetType().GetProperty("MyEntity");//--错误:找到模糊匹配}Type.GetPropertywithAmbiguousMatchException......派生类型声明了一个使用new修饰符隐藏的属性具有相同名称的继承属性如果运行以下varproperties=myDE.GetType().GetProperties().Where(p=>p.Name=="MyEntity");您将看到返回了两个PropertyInfo对象。一个用于MyBaseEntity,一个用于MyDerivedEntity。这就是为什么您会收到Ambiguousmatchfound错误。您可以像这样获取MyDerivedEntity的PropertyInfo:PropertyInfopropInfoSrcObj=myDE.GetType().GetProperties().Single(p=>p.Name=="MyEntity"&&p.PropertyType==typeof(MyDerivedEntity));对于属性:MemberInfoproperty=myDE.GetProperty("MyEntity",BindingFlags.Instance|BindingFlags.Public|BindingFlags.DeclaredOnly);方法:MemberInfomethod=typeof(String).GetMethod("ToString",BindingFlags.Instance|BindingFlags.Publics|BindingFlagDeclaredOnly,null,newType[]{},//MethodToString()withoutparametersnull);BindingFlags.DeclaredOnly–指定只应考虑在所提供类型的层次结构级别声明的成员。不考虑继承成员。由于MyDerivedEntity中的新声明,出现了歧义。要克服这个问题,您可以使用LINQ:vartype=myObject.GetType();varcolName="我的实体";varall=type.GetProperties().Where(x=>x.Name==colName);varinfo=all.FirstOrDefault(x=>x.DeclaringType==type)??all.First();如果存在,这将从派生类型获取属性,否则获取基类。如果需要,可以轻松翻转。Kevin已经指出了这一点,但您不需要复杂的语句或LINQ:PropertyInfopropInfoSrcObj=myDE.GetType().GetProperty("MyEntity",typeof(MyDerivedEntity));我在浏览器控制台中收到此错误我进行了搜索,我发现此异常是针对c#的,答案也是针对c#的,然后我尝试查看我的代码并找出问题发生的位置:我有一个ajaxpost方法和当我发布数据时出现此错误,所以我通过了数据将通过C#Web方法收集,所以当我看到模型时,我有2个同名属性,所以我删除了一个问题并解决了我的异常在使用LocationKey对象的MsgPack序列化时遇到了这个问题。以我在LocationKey类中定义的运算符结束。定义这两个运算符导致DefaultContext.GetSerializer(obj.GetType());尝试序列化时发现不明确的匹配项。删除一组运算符使问题消失了。以上就是C#学习教程的全部内容:GetPropertyreflection导致新属性出现“模糊匹配”。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticbooloperator==(intkey1,LocationKeykey2){returnkey1==key2.Value;}publicstaticbooloperator!=(intkey1,LocationKeykey2){returnkey1!=key2.Value;}publicstaticbooloperator==(LocationKeykey1,intkey2){returnkey1.Value==key2;}publicstaticbooloperator!=(LocationKeykey1,intkey2){returnkey1.Value!=key2;管理员删除。如需转载请注明出处: