使用List设置Class对象
本文关键字:对象 Class 设置 List 使用 | 更新日期: 2023-09-27 18:12:10
我有一个包含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输入将是有帮助的。感谢
反射在这里可能很有用,但如果一个类中有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>
,其中key
是属性名称,则可以将每个属性设置为相应的值。
您可以尝试这样的操作(对象初始值设定项(:
Input input = new Input { mode1 = dataList[0],
geom2 = dataList[1],
type3 = dataList[2],
spacing4 = dataList[3],
fluid5 = dataList[4],
spec6 = dataList[5] };
正如其他人所说,您可以使用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];
您可以使用反射来尝试类似的操作:
var properties = typeof(Input).GetProperties();
for(int i = 0; i < properties.Count(); ++i)
{
properties[i].SetValue(dataList[i]);
}
我不确定如何使用属性,但也可以在类中有一个列表,然后设置整个列表或添加到其中。然后可以使用枚举来跟踪这些值。
类似这样的东西:
public class Input
{
public enum MyValues
{
mode1 = 1,
geom2 = 2,
...
}
public List<int> Data { get; set; }
}
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];
}