获取 class 个属性长度
Getting class attributes length
第一次我会向你介绍我需要做什么,因为我认为这不是一个"normal"问题,而是一个非常具体的问题。
我有一个 class Words
,它定义了 16 个布尔值。
这个 class 在我的通用 OldParser
class 中使用,因为它定义了每个属性。这是我的 class 带有 Words 类型属性的样子。
class MyClass: OldParser
{
public Words[] arg1 = new Words[2];
public Words[] arg2 = new Words[5];
public Words arg3;
}
然后我有一个单词数组,其中包含创建 class 所需的内容。
所以前两个单词将转到 arg1。其他 5 个分配给 arg2,最后一个分配给 arg3。
当然,我需要它对我拥有的每个 class 都是通用的,所以它需要是通用的。
所以这是我的问题:我怎样才能得到我的 class 的所有属性的列表?然后怎么知道数组的大小?
例如,对于这个 class,我需要获取每个属性并知道我的第一个属性是 2 的数组,第二个是 5 的数组,最后一个属性不是数组.
我用过:
List<System.Reflection.FieldInfo> list = typeof(MyClass)
.GetFields(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public)
.ToList();
为了得到我的class属性。但我不知道如何获取数组的大小,而且我不确定我的做法是否正确。
由于字段是非静态的,因此您无法在没有实例的情况下访问数组长度。创建实例后,您可以执行以下操作:
MyClass instance = ...;
IDictionary<FieldInfo, int> arrayLengths = list.Where(field => field.FieldType.IsArray)
.ToDictionary(field => field,
field => ((Array)field.GetValue(instance)).Length);
你可以这样做,
var myClass = new MyClass();
var fieldInfos = typeof(MyClass).GetFields();
var myArraysAndLengths = new Dictionary<string, int>();
foreach (var field in fieldInfos)
{
var fieldName = field.Name;
var fieldValue = field.GetValue(myClass);
var fieldType = field.FieldType;
if (fieldType == typeof (Words[]))
{
var value = (Words[]) fieldValue;
var length = value.Length;
myArraysAndLengths[fieldName] = length;
}
}
第一次我会向你介绍我需要做什么,因为我认为这不是一个"normal"问题,而是一个非常具体的问题。
我有一个 class Words
,它定义了 16 个布尔值。
这个 class 在我的通用 OldParser
class 中使用,因为它定义了每个属性。这是我的 class 带有 Words 类型属性的样子。
class MyClass: OldParser
{
public Words[] arg1 = new Words[2];
public Words[] arg2 = new Words[5];
public Words arg3;
}
然后我有一个单词数组,其中包含创建 class 所需的内容。 所以前两个单词将转到 arg1。其他 5 个分配给 arg2,最后一个分配给 arg3。 当然,我需要它对我拥有的每个 class 都是通用的,所以它需要是通用的。
所以这是我的问题:我怎样才能得到我的 class 的所有属性的列表?然后怎么知道数组的大小?
例如,对于这个 class,我需要获取每个属性并知道我的第一个属性是 2 的数组,第二个是 5 的数组,最后一个属性不是数组.
我用过:
List<System.Reflection.FieldInfo> list = typeof(MyClass)
.GetFields(BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public)
.ToList();
为了得到我的class属性。但我不知道如何获取数组的大小,而且我不确定我的做法是否正确。
由于字段是非静态的,因此您无法在没有实例的情况下访问数组长度。创建实例后,您可以执行以下操作:
MyClass instance = ...;
IDictionary<FieldInfo, int> arrayLengths = list.Where(field => field.FieldType.IsArray)
.ToDictionary(field => field,
field => ((Array)field.GetValue(instance)).Length);
你可以这样做,
var myClass = new MyClass();
var fieldInfos = typeof(MyClass).GetFields();
var myArraysAndLengths = new Dictionary<string, int>();
foreach (var field in fieldInfos)
{
var fieldName = field.Name;
var fieldValue = field.GetValue(myClass);
var fieldType = field.FieldType;
if (fieldType == typeof (Words[]))
{
var value = (Words[]) fieldValue;
var length = value.Length;
myArraysAndLengths[fieldName] = length;
}
}