按顺序将数组赋值给类成员

本文关键字:成员 赋值 数组 顺序 | 更新日期: 2023-09-27 18:09:52

我有以下类

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

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

按顺序将数组赋值给类成员

我会把它封装在一个方法中

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

我不知道这是否有帮助,我也不知道我是否会认为这是"优雅的",但是你可以用反射做一些棘手的事情,像这样:

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

一种健壮的方法可能是用一个自定义属性来修饰你的属性,该属性指示它们对应于数组中的哪个索引(这显然比其他建议更需要工作)。然后,您可以通过检查属性来使用反射将数组映射到属性。

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
    }
}