我有一个包含n个数据成员的类,如下所示:
public class Input
{
int mode1 {get; set;}
int geom2 {get; set;}
int type3 {get; set;}
int spacing4 {get; set;}
int fluid5 {get; set;}
int spec6 {get; set;}
...
...
...
int data_n {get; set;}
}
我有一个n int项目的填充列表。
List<int> dataList = new List<int>
现在我想通过迭代或通过任何其他直接方法从dataList填充类Input的对象将会有所帮助。谢谢
答案 0 :(得分:3)
反射在这里很有用,但如果你在一个类中有98个属性,你一定要重新考虑你的设计。
var properties = typeof(Input)
.GetProperties()
.Where(p => p.PropertyType == typeof(int));
int i = 0;
foreach(var prop in properties)
prop.SetValue(yourObject, dataList[i++]);
但是这并不能保证每个属性都会被正确分配,因为正如@CodeCaster GetProperty
方法已经提到的那样,方法不会按特定顺序返回属性。并且无法确定如果您可以使用List<int>
代替Dictionary<string, int>
作为属性名称,那么您可以将每个属性设置为相应的值。
答案 1 :(得分:1)
您可以尝试这样的事情(对象初始化程序):
Input input = new Input { mode1 = dataList[0],
geom2 = dataList[1],
type3 = dataList[2],
spacing4 = dataList[3],
fluid5 = dataList[4],
spec6 = dataList[5] };
答案 2 :(得分:0)
你可以使用GetProperties
方法从反射中做到这一点,正如其他人所说,但为什么不用一种简单的方法来做呢?
Input i = new Input();
i.mode1 = dataList[0];
i.geom2 = dataList[1];
i.type3 = dataList[2];
i.spacing4 = dataList[3];
i.fluid5 = dataList[4];
i.spec6 = dataList[5];
答案 3 :(得分:0)
您可以使用反射尝试这样的事情:
var properties = typeof(Input).GetProperties();
for(int i = 0; i < properties.Count(); ++i)
{
properties[i].SetValue(dataList[i]);
}
答案 4 :(得分:0)
我不确定你如何使用你的属性,但你可以在你的类中有一个列表,然后设置整个列表或添加到那个。然后你可以使用枚举来跟踪值。
这样的事情:
public class Input
{
public enum MyValues
{
mode1 = 1,
geom2 = 2,
...
}
public List<int> Data { get; set; }
}
答案 5 :(得分:-1)
class Layout
{
int mode1 { get; set; }
int geom2 { get; set; }
int type3 { get; set; }
int spacing4 { get; set; }
int fluid5 { get; set; }
int spec6 { get; set; }
public int this[int number]
{
get
{
if (number == 1)
return mode1;
else if (number == 2)
return geom2;
else if (number == 3)
return type3;
else if (number == 4)
return spacing4;
else if (number == 5)
return fluid5;
else if (number == 6)
return spec6;
else
return -1;
}
set
{
if (number == 1)
mode1 = value;
else if (number == 2)
geom2 = value;
else if (number == 3)
type3 = value;
else if (number == 4)
spacing4 = value;
else if (number == 5)
fluid5 = value;
else if (number == 6)
spec6 = value;
}
}
迭代代码
Layout layout = new Layout();
foreach(int i in dataList)
{
layout[i]=dataList[i];
}