C# 获取包含属性内容的数组

C# 获取包含属性内容的数组,c#,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 =

我在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
”方法吗?也许使用反射?

您想要的是将类序列化为数组,那么为什么要重新发明轮子呢?使用现有的序列化对象的方法,并根据您的特殊需要自定义它们。

您想要的是将类序列化为数组,那么为什么要重新发明轮子呢?使用现有的序列化对象的方法,并根据您的特殊需要对其进行自定义。

这似乎是一种奇怪的方式,但这是可能的。您需要对象的实例和类型,然后可以获取类型上的所有属性,循环遍历每个属性,并获取所述类实例中每个属性的值

TestClass obj = new TestClass();
Type t = typeof(TestClass);
foreach (var property in t.GetProperties())
{
    var value = property.GetValue(obj);
}

这似乎是一种奇怪的方式,但这是可能的。您需要对象的实例和类型,然后可以获取类型上的所有属性,循环遍历每个属性,并获取所述类实例中每个属性的值

TestClass obj = new TestClass();
Type t = typeof(TestClass);
foreach (var property in t.GetProperties())
{
    var value = property.GetValue(obj);
}

您可以与

组合您可以与

组合您可以使用反射来实现这一点

typeof(MyClass).GetFields ();
将返回一个FieldInfo数组。然后使用

filedinfo.GetValue (myobject);

您可以使用反射来实现这一点

typeof(MyClass).GetFields ();
将返回一个FieldInfo数组。然后使用

filedinfo.GetValue (myobject);

使用反射。以下是一个例子:

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);

使用反射。以下是一个例子:

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);

因为字段是常量,所以不需要对象实例,只需在
GetValue
中使用
null
。此外,这些是字段,而不是属性

  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;
var fields=typeof(Parameters).GetFields();
object[]数组=新对象[fields.Count()];
对于(int i=0;i
因为字段是常量,所以不需要对象实例,只需在
GetValue
中使用
null
。此外,这些是字段,而不是属性

  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;
var fields=typeof(Parameters).GetFields();
object[]数组=新对象[fields.Count()];
对于(int i=0;i
子类在哪里?你是说嵌套类吗?为什么嵌套类将它们作为单独的字段?我觉得很奇怪……你说得对。我是说嵌套的。我刚刚编辑过。它们在嵌套的类参数中与MyClass分离,以使它们位于块中,而不干扰MyClass字段。为什么看起来很奇怪?谢谢有这么多单独的字段是很奇怪的-为什么这个类没有一个可以调用的方法来获取参数呢?它可能有这个方法来获取参数。我可以在Parameters类中移动getAllParameters,但无论如何,我希望在创建数组时不必使用显式整数来计算参数。也许我的解决方案不是很干净,“子类”在哪里?你是说嵌套类吗?为什么嵌套类将它们作为单独的字段?我觉得很奇怪……你说得对。我是说嵌套的。我刚刚编辑过。它们在嵌套的类参数中与MyClass分离,以使它们位于块中,而不干扰MyClass字段。为什么看起来很奇怪?谢谢有这么多单独的字段是很奇怪的-为什么这个类没有一个可以调用的方法来获取参数呢?它可能有这个方法来获取参数。我可以在Parameters类中移动getAllParameters,但无论如何,我希望在创建数组时不必使用显式整数来计算参数。也许我的解决方案不是很干净。你不需要
myobject
,你只需要使用
null
:)就可以了!您可以实例化
Properties
类(这将是
myobject
,这会起作用,但不需要实例化:)您不需要
myobject
,只需使用
null
:)即可!您可以实例化
Properties
类(这将是
myobject
,这会起作用,但不需要实例化:)OP有字段,而不是属性。OP有字段,而不是属性。OP有字段,而不是属性。因此他可以使用Type。GetFieldsOP有字段,而不是属性。因此他可以使用Type.GetFieldsThanks!我要试试这个。@pablof你过得怎么样?还有一件事。是否保证数组将按声明的顺序发送字段?@pablof我想是的-只是测试一下?它可以按字母顺序排列,但无论哪种方式,您都可以使用
IEnumerable.OrderBy
或类似的内容。谢谢!我要试试这个。@pablof你过得怎么样?还有一件事。是否保证数组将按声明的顺序发送字段?@pablof我想是的-只是测试一下?它可以按字母顺序排列,但无论哪种方式,您都可以使用
IEnumerable.OrderBy
或类似的内容。