使用c#对象初始化的类成员的条件初始化
本文关键字:初始化 成员 条件 使用 对象 | 更新日期: 2023-09-27 17:50:30
我有一个简单的类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
};
。我只是想初始化成员Test1只有当var1不为空,所以不知何故,我需要在初始化时进行检查。我知道这是一个简单的问题,可以用不同的方式来完成,但当我重构现有的代码并泛化它时,我只需要通过对象初始化来解决。在我看来很简单,但我却无法自己找到解决方法。
没有多少经验的程序员,所以非常感谢任何帮助
无论如何都不会编译,我不认为。但无论哪种方式,如果不初始化,该值都会得到int型的默认值。相当于:
int? var1 = null;
int var2 = 2;
int var3 =5;
var t = new Test
{
Test1 = var1.GetValueOrDefault(),
Test2 = var2,
Test3 = var3
};
Test1
的默认值为零,因此您可以使用null-coallescing运算符:
var t = new Test {
Test1 = var1 ?? 0,
Test2 = var2,
Test3 = var3
};
如果类可能指定默认int之外的默认值,或者由于其他原因,当var1
是null
时,您根本不需要调用属性设置器,那么您就不能使用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;
如果不是这种情况,你可以用这个或其他任何答案