使用c#对象初始化对类成员进行条件初始化

时间:2014-03-14 19:55:27

标签: c# oop

我有一个简单的类,其中3个非整数成员

public class Test
{
    public int Test1 { get; set; }
    public int Test2 { get; set; }
    public int Test3 { get; set; }
}

现在我想用这样的东西

        int? var1 = null;
        int var2 = 2;
        int var3 =5;
       var t =  new Test
        {
            Test1 = var1, // (error) Initialize Test1 only when var1 is not null
            Test2 = var2,
            Test3 = var3
        };

即。我只想在var1不为null的情况下初始化成员Test1,所以我需要在初始化时进行检查。我知道它是一个简单的问题,可以用不同的方式完成,但是当我重构现有的代码并将其推广时,我只需通过对象初始化来解决问题。看起来很简单,但不知何故无法自己找到解决方案

没有多少经验丰富的程序员,所以非常感谢任何帮助

3 个答案:

答案 0 :(得分:4)

反正不会编译,我不认为。但无论哪种方式,如果你没有初始化它,该值将获得int的默认值。相当于:

    int? var1 = null;
    int var2 = 2;
    int var3 =5;
    var t =  new Test
    {
        Test1 = var1.GetValueOrDefault(),
        Test2 = var2,
        Test3 = var3
    };

答案 1 :(得分:0)

Test1的默认值为零,因此您可以使用null-coalescing运算符:

var t =  new Test {
    Test1 = var1 ?? 0,
    Test2 = var2,
    Test3 = var3
};

答案 2 :(得分:0)

如果类可能指定除默认int之外的默认值,或者由于其他原因,您需要在var1null时根本不调用属性设置器,那么您无法使用Test1的对象初始化语法。 (我知道问题是使用对象初始化,但只是在无法工作的情况下......)例如

public class Test
{
    public int Test1 { get; set; }
    public int Test2 { get; set; }
    public int Test3 { get; set; }

    public Test()
    {
        Test1 = -1;
    }
}

var t =  new Test
    {
        Test2 = var2,
        Test3 = var3
    };
if (var1 != null) // or (var1.HasValue)
    t.Test1 = var1.Value;

如果不是这种情况,您可以使用此答案或任何其他答案。