FieldInfo[] fields = typeof(MyDictionary).GetFields();
MyDictionary
是一个静态类,所有字段都是字符串数组。
如何获取每个数组的Length值,然后迭代遍历所有元素? 我尝试了演员:
field as Array
但是会导致错误
无法将类型'System.Reflection.FieldInfo'转换为'System.Array' 通过引用转换,装箱转换,拆箱转换, 包装转换或空类型转换
答案 0 :(得分:10)
编辑后编辑:请注意,您拥有的是反射对象,而不是与您自己的类相关的对象或值。换句话说,您所拥有的那些FieldInfo
对象对于您班级的所有实例都是通用的。获取字符串数组的唯一方法是使用这些FieldInfo
对象来获取类的特定实例的字段值。
为此,您使用FieldInfo.GetValue。它将字段的值作为对象返回。
由于您已经知道它们是字符串数组,因此简化了事情:
如果字段是静态的,请为null
参数传递obj
。
foreach (var fi in fields)
{
string[] arr = (string[])fi.GetValue(obj);
... process array as normal here
}
如果您想确保只处理字符串数组的字段:
foreach (var fi in fields)
{
if (fi.FieldType == typeof(string[]))
{
string[] arr = (string[])fi.GetValue(obj);
... process array as normal here
}
}
答案 1 :(得分:9)
举个例子:
using System;
using System.Reflection;
namespace ConsoleApplication1
{
public static class MyDictionary
{
public static int[] intArray = new int[] { 0, 1, 2 };
public static string[] stringArray = new string[] { "zero", "one", "two" };
}
static class Program
{
static void Main(string[] args)
{
FieldInfo[] fields = typeof(MyDictionary).GetFields();
foreach (FieldInfo field in fields)
{
if (field.FieldType.IsArray)
{
Array array = field.GetValue(null) as Array;
Console.WriteLine("Type: " + array.GetType().GetElementType().ToString());
Console.WriteLine("Length: " + array.Length.ToString());
Console.WriteLine("Values");
Console.WriteLine("------");
foreach (var element in array)
Console.WriteLine(element.ToString());
}
Console.WriteLine();
}
Console.Readline();
}
}
}
答案 2 :(得分:4)
像这样:
FieldInfo[] fields = typeof(MyDictionary).GetFields();
foreach (FieldInfo info in fields) {
string[] item = (string[])info.GetValue(null);
Console.WriteLine("Array contains {0} items:", item.Length);
foreach (string s in item) {
Console.WriteLine(" " + s);
}
}