按顺序将数组赋值给类成员
本文关键字:成员 赋值 数组 顺序 | 更新日期: 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
}
}