我目前正在尝试使用泛型类型的扩展方法将IEnumerable<T>
转换为T2类型的二维数组。您还应该能够选择要包含在该数组中的T的哪些属性。
这是我到目前为止所得到的:
public static T2[][] ToMultidimensionalArray<T, T2>(this IEnumerable<T> enumerable, int count, params string[] propNames)
{
IEnumerator<T> enumerator = enumerable.GetEnumerator();
T2[][] resultArray = new T2[count][];
int i = 0;
int arrLength = propNames.Length;
while (enumerator.MoveNext())
{
resultArray[i] = new T2[arrLength];
int j = 0;
foreach(string prop in propNames)
{
resultArray[i][j] = ((T)enumerator.Current).//How do I access the properties?
j++;
}
i++;
}
return resultArray;
}
我在enumerator.Current
- 循环中访问foreach
的属性时遇到问题。
我正在使用.NET-Framework 4.0。
非常感谢任何输入。
谢谢,
丹尼斯
答案 0 :(得分:2)
一般来说,这个问题可以用反射来解决:
public static T2[][] ToMultidimensionalArray<T, T2>(
this IEnumerable<T> enumerable,
int count,
params string[] propNames)
{
T2[][] resultArray = new T2[count][];
int i = 0;
int arrLength = propNames.Length;
foreach (var item in enumerable)
{
resultArray[i] = new T2[arrLength];
int j = 0;
foreach (string prop in propNames)
{
// Get the required property info using reflection
var propertyInfo = typeof(T).GetProperty(prop);
// Extract the getter method of the property
var getter = propertyInfo.GetGetMethod();
// Invoke the getter and get the property value
var value = getter.Invoke(item, null);
// Cast the value to T2 and store in the array
resultArray[i][j] = (T2) value;
j++;
}
i++;
}
return resultArray;
}
我将问题理解为拥有T
集合,其中这些对象具有T2
类型的属性。目标是获取每个对象的属性并将它们放在多维数组中。如果我错了,请纠正我。
答案 1 :(得分:1)
但我无法理解你想要什么。我不认为这种方法可行。