我在C#中的代码中有一个类,我希望从数组中的嵌套类中获取所有属性,其中包含参数数量的大小以及对象数组中所有参数的内容。像这样:
class MyClass {
class Parameters {
public const string A = "A";
public const string B = "B";
public const string C = "C";
public const string D = "D";
public const string E = "E";
public const string F = "F";
}
public object[] getAllParameters() {
object[] array = new object[6];
array[0] = Parameters.A;
array[1] = Parameters.B;
array[2] = Parameters.C;
array[3] = Parameters.D;
array[4] = Parameters.E;
array[5] = Parameters.F;
}
//more methods and code
}
但是,如果我想添加G
和H
参数,我将不得不更新方法getAllParameters
的大小,初始化以及其他部分的更多内容。代码。
我是否可以更加通用地使用“getAllParameters
”方法,而不考虑显式参数?有反射吗?
答案 0 :(得分:2)
由于字段是常量,因此您不需要在null
中使用GetValue
的对象实例。另外 - 这些是字段,而不是属性。
var fields = typeof(Parameters).GetFields();
object[] array = new object[fields.Count()];
for (int i = 0; i < fields.Count(); i++)
{
array[i] = fields[i].GetValue(null);
}
return array;
答案 1 :(得分:0)
你想要的是将类序列化为数组,那么为什么要重新发明轮子呢?使用现有的序列化对象的方法,并根据您的特定需求进行自定义。
答案 2 :(得分:0)
这似乎是一种奇怪的方式,但这是可能的。您需要对象的实例及其类型,然后您可以获取该类型的所有属性,遍历每个属性并获取所述类的实例中每个所述属性的值。
TestClass obj = new TestClass();
Type t = typeof(TestClass);
foreach (var property in t.GetProperties())
{
var value = property.GetValue(obj);
}
答案 3 :(得分:0)
你可以使用反射来做到这一点。
typeof(MyClass).GetFields ();
将返回FieldInfo数组。然后你可以使用
获取每个字段的值filedinfo.GetValue (myobject);
答案 4 :(得分:0)
使用反射。这是一个例子:
class A
{
public string F1;
public string F2;
}
在方法中:
var a = new A();
var fields = typeof (A).GetFields();
var values = from fieldInfo in fields
select fieldInfo.GetValue(a);
答案 5 :(得分:-1)