C# 如何在C中访问泛型方法中的属性值?
假设我有几个具有相同属性的不同类型的类 我想创建一个通用方法,该方法应该访问这些类的属性值 以下代码无效,将引发此错误: 无法解析方法“GetValueT” 。。那么正确的方法是什么呢C# 如何在C中访问泛型方法中的属性值?,c#,generics,C#,Generics,假设我有几个具有相同属性的不同类型的类 我想创建一个通用方法,该方法应该访问这些类的属性值 以下代码无效,将引发此错误: 无法解析方法“GetValueT” 。。那么正确的方法是什么呢 public static List<int> FooBar<T>(T myObject) { var myValue = typeof(T).GetProperty("myList").GetValue(myObject); return myValue; } 正确的方法可能
public static List<int> FooBar<T>(T myObject)
{
var myValue = typeof(T).GetProperty("myList").GetValue(myObject);
return myValue;
}
正确的方法可能是使用where T:SomeInterfaceOrBaseType,即具有myList成员的对象,然后访问它;i、 e.返回myObject.myList 接口IFoo{ 列表myList{get;} } 公共静态列表FooBarT myObject,其中T:IFoo{ 返回myObject.myList; } 但是。。。当您完成此操作时,实际上不再需要该方法,好像调用方知道类型是IFoo,他们可以自己完成 如果你必须通过反射来做。。。嗯,那很难。滥用动态可能更容易: 公共静态列表FooBarT myObject { 动态对象=myObject; List myList=obj.myList; 返回myList; }
正确的方法可能是使用where T:SomeInterfaceOrBaseType,即具有myList成员的对象,然后访问它;i、 e.返回myObject.myList 接口IFoo{ 列表myList{get;} } 公共静态列表FooBarT myObject,其中T:IFoo{ 返回myObject.myList; } 但是。。。当您完成此操作时,实际上不再需要该方法,好像调用方知道类型是IFoo,他们可以自己完成 如果你必须通过反射来做。。。嗯,那很难。滥用动态可能更容易: 公共静态列表FooBarT myObject { 动态对象=myObject; List myList=obj.myList; 返回myList; }
如果您真的想对泛型执行此操作,请尝试下面的代码
return (List<int>)(typeof(T).GetProperty("myList").GetValue(myObject, null))
如果您真的想对泛型执行此操作,请尝试下面的代码
return (List<int>)(typeof(T).GetProperty("myList").GetValue(myObject, null))
您可以这样做:myObject.GetType.GetPropertymyList.GetValuemyObject,null 您可以这样做:myObject.GetType.GetPropertymyList.GetValuemyObject,null 该错误消息与您在此处显示的代码不匹配。请显示一个。@DavidG我已根据您的通知更新了帖子。该错误消息与您在此处显示的代码不匹配。请显示一个。@DavidG我已根据您的通知更新了帖子。此外,使用泛型也没有意义,您可以简单地将IFoo作为参数…@ZoharPeled如果T可以是值类型,那么通用方法允许您使用约束调用而不是装箱,但是。。。总的来说:我同意;当然,如果我们期望T是一个值类型,我们也可能会推测它不是很小,因此添加它可能也很好,即在T MyObject中是的,它可以,但这是一个边缘情况,除非广泛使用,否则装箱应该不会对整体性能产生显著影响。此外,使用泛型也没有意义,您可以简单地将IFoo作为参数…@ZoharPeled如果T可以是值类型,那么通用方法允许您使用约束调用而不是装箱,但是。。。总的来说:我同意;当然,如果我们期望T是一个值类型,我们也可能会推测它不是很小,因此添加它也可能很好,即在T MyObject中是的,它可以,但这是一个边缘情况,除非广泛使用,否则装箱应该不会对整体性能产生显著影响。