按顺序将数组分配给类成员

时间:2013-04-19 03:52:30

标签: c#

我有以下课程

public class MyClass
{
  public string a {get;set;}
  public string b {get;set;}
  public string c {get;set;}
  public string d {get;set;}
  public string e {get;set;}
  ...
  ...
  public string z {get;set;}
}

和以下字符串数组

string[] input;

我无法事先知道数组的大小。我唯一的信息是它的长度在1到26之间,所有项目都是有序的。我需要做的是将数组项分配给类成员,如下所示。

var myvar = new MyClass();

if(input.length >= 1)
   myvar.a = input[0];
if(input.length >= 2)
   myvar.b = input[1];
...
if(input >=26)
   myvar.z = input[25];

有没有办法比我的方法更优雅?

3 个答案:

答案 0 :(得分:4)

我会将其包装在方法

public string GetVal(int index){
  if(input.Length > index)
  {
    return input[index];
  }
  return null;
} 

public string a
{
  get{return GetVal(0);}
}

答案 1 :(得分:4)

我不知道这是否会有所帮助,而且我也不知道我是否会认为这是“优雅”,但你可以用这样的反思做一些棘手的事情:

var myVar = new MyClass();
var properties = typeof(MyClass).GetProperties().OrderBy(x => x.Name).ToArray();
for (var i = 0; i < input.Length; ++i)
{
  properties[i].SetValue(myVar, input[i]);
}

答案 2 :(得分:1)

一种强大的方法可能是使用自定义属性来装饰您的属性,该属性指示它们对应的数组中的哪个索引(尽管这看起来似乎比其他建议更多)。然后,您可以使用反射通过检查属性将数组映射到属性。

public class MyClass {
    [ArrayIndex(1)]
    public string a {get; set;}

    [ArrayIndex(2)]
    public string b {get; set;}

    public void ProcessData(IEnumerable<string> input) {
        // loop through input and use reflection to find the property corresponding to the index
    }
}