Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中访问泛型方法中的属性值?_C#_Generics - Fatal编程技术网

C# 如何在C中访问泛型方法中的属性值?

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; } 正确的方法可能

假设我有几个具有相同属性的不同类型的类

我想创建一个通用方法,该方法应该访问这些类的属性值

以下代码无效,将引发此错误:

无法解析方法“GetValueT”

。。那么正确的方法是什么呢

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中是的,它可以,但这是一个边缘情况,除非广泛使用,否则装箱应该不会对整体性能产生显著影响。