在声明类列表时更好地分配值

时间:2017-10-13 03:52:36

标签: c#

我只是声明一个从linq到sql类创建的表的类列表,并直接为它们赋值,我想这是很多代码。如果有办法我可以减少它,请告诉我。

我的代码

  List<className> obj = new List<className>() { new className { field1 = value1; field2 = value2}, new className { field 1 = value1}...;

2 个答案:

答案 0 :(得分:2)

在这种情况下,我建议在你的类中使用一个多参数构造函数 - 这样可以避免在对象创建过程中逐字段赋值。

例如,类声明可能是:

 class MyClass
    {
        public string Field1 { get; set; }
        public string Field2 { get; set; }
        public string Field3 { get; set; }
        public string Field4 { get; set; }

        public MyClass()
        { }

        public MyClass(string f1, string f2, string f3 ,string f4)
        {
            Field1 = f1;
            Field2 = f2;
            Field3 = f3;
            Field4 = f4;
        }
    }

然后使用以下代码初始化List<>

List<MyClass> objects = new List<MyClass>()
   {
        new MyClass("f1", "f2", "f3", "f4"),
        new MyClass("f1", "f2", "f3", "f4")
   };

您可以根据需要为每个field提供值。

答案 1 :(得分:1)

只想展示“清洁”集合初始化的方式

var items = new List<MyClass>
{
    new MyClass
    {
        Field1 = "1value1",
        Field2 = "1value2",
        Field3 = "1value3",
        Field4 = "1value4"
    },
    new MyClass
    {
        Field1 = "2value1",
        Field2 = "2value2",
        Field3 = "2value3",
        Field4 = "2value4"
    }
};

使用上述方法,您可以初始化实例,而无需为所有属性提供值 格式化将使您不受构造函数参数的约束。

我认为,构造函数不应仅用于节省编写代码的数量 构造函数是类型契约的一部分 - 它告诉消费者该类需要设置所有属性才能正常工作。