Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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#_.net_Reflection_Collections_Extension Methods - Fatal编程技术网

C# 使用反射和列表<>;,可以通过扩展方法返回特定属性的数组吗?

C# 使用反射和列表<>;,可以通过扩展方法返回特定属性的数组吗?,c#,.net,reflection,collections,extension-methods,C#,.net,Reflection,Collections,Extension Methods,我对术语不太清楚,所以请原谅我不够清晰:给定一个列表集合,是否可以使用refection创建一个扩展方法,允许使用properties名称返回列表集合中特定类成员/属性的数组?我知道内部类型可能会有所不同,但扩展方法将返回正确的类型 public class someClass { public someClass(UInt32 _someInt, Double _someDouble, String _someString) { someInt = _someI

我对术语不太清楚,所以请原谅我不够清晰:给定一个列表集合,是否可以使用refection创建一个扩展方法,允许使用properties名称返回列表集合中特定类成员/属性的数组?我知道内部类型可能会有所不同,但扩展方法将返回正确的类型

public class someClass
{
    public someClass(UInt32 _someInt, Double _someDouble, String _someString)
    {
        someInt = _someInt;
        someDouble = _someDouble;
        someString = _someString;
    }
    public UInt32 someInt { get; set; }
    public Double someDouble { get; set; }
    public String someString { get; set; }

  }

...
List<someClass> listOfClasses = new List<someClass>();
listOfClasses.Add(new someClass(...));
listOfClasses.Add(new someClass(...));
listOfClasses.Add(new someClass(...));

//an extension function that does something like this
object[] propDouble = listOfClasses.ToArray("someDouble");
公共类someClass
{
公共someClass(UInt32\u someInt,Double\u someDouble,String\u someString)
{
someInt=_someInt;
someDouble=\u someDouble;
someString=\u someString;
}
公共UInt32 someInt{get;set;}
公共双精度someDouble{get;set;}
公共字符串someString{get;set;}
}
...
List ListofClass=新列表();
添加(新的someClass(…);
添加(新的someClass(…);
添加(新的someClass(…);
//这样做的扩展函数
object[]propDouble=listofClass.ToArray(“someDouble”);
简短回答:是

如何:

您可以轻松地将其转换为扩展方法。

简短回答:是

如何:


您可以轻松地将其转换为扩展方法。

这是否不满足您的要求

List<someclass> L;
IEnumerable<DesiredPropertyType> Properties = 
     L.Select(Item => Item.DesiredProperty).ToArray();
列表L;
IEnumerable属性=
L.Select(Item=>Item.DesiredProperty).ToArray();

这是否不能满足您的要求

List<someclass> L;
IEnumerable<DesiredPropertyType> Properties = 
     L.Select(Item => Item.DesiredProperty).ToArray();
列表L;
IEnumerable属性=
L.Select(Item=>Item.DesiredProperty).ToArray();

我想他想在运行时指定属性名。我想他想在运行时指定属性名。什么都没有。现在只看答案…什么都没有。现在只看答案……这会引发一个错误:没有重载方法“getvalue”接受一个参数。@Gio:您使用的是哪个.NET框架,如果您使用.NET 4.5,就可以了,如果您在下面,请尝试
getvalue(x,null)
就是这样。不完全是一个扩展方法,但已经足够好了。这会引发一个错误:没有重载方法“getvalue”接受一个参数。@Gio:您使用的是哪种.NET framework,如果您使用的是.NET 4.5,就可以了,如果您在下面,请尝试
getvalue(x,null)
就是这样。不完全是一种扩展方法,但已经足够好了。
var propDouble = listOfClasses.Select(x => typeof(someClass)
                                           .GetProperty("someDouble")
                                           .GetValue(x)).ToArray();