获取包含属性内容的数组

时间:2013-02-20 10:21:59

标签: c#

我在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

}

但是,如果我想添加GH参数,我将不得不更新方法getAllParameters的大小,初始化以及其他部分的更多内容。代码。

我是否可以更加通用地使用“getAllParameters”方法,而不考虑显式参数?有反射吗?

6 个答案:

答案 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)