使用List设置Class对象?

时间:2014-07-09 08:47:26

标签: c# list class loops

我有一个包含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的对象将会有所帮助。谢谢

6 个答案:

答案 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];
 }