我有以下课程
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];
有没有办法比我的方法更优雅?
答案 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
}
}