我有一个类,它有4个可空的double字段:
public class myClass
{
public double? i1;
public double? i2;
public double? i3;
public double? i4;
}
字符串
我有4个列表,它们可能包含不同的值或为空,例如:
List<double> inputs1 = new List<double> { 1, 2, 3 };
List<double> inputs2 = new List<double> { 4, 5 };
List<double> inputs3 = new List<double> { };
List<double> inputs4 = new List<double> { 8, 9 };
型
现在,我想创建一个myClass
的示例列表,其中包含这些值的所有可能组合。为了避免复杂的foreach循环(在完整的应用程序中,myClass
中有更多的列表和字段),我使用这个LINQ表达式:
List<myClass> myObjects = (
from double? input1 in inputs1.DefaultIfEmpty()
from double? input2 in inputs2.DefaultIfEmpty()
from double? input3 in inputs3.DefaultIfEmpty()
from double? input4 in inputs4.DefaultIfEmpty()
select new myClass()
{
i1 = input1,
i2 = input2,
i3 = input3,
i4 = input4
}
).ToList();
型DefaultIfEmpty()
背后的意图是,如果这些列表中的任何一个是空的(如本例中的inputs3
),对象创建仍然会发生,但相应的值不会写入,i3
仍然是null
。问题是DefaultIfEmpty()
似乎返回0
,因此i3
变成0
而不是null
。
我似乎找不到正确的方法来“告诉”DefaultIfEmpty()
在列表为空时返回null
。我尝试了DefaultIfEmpty((double?)null)
,但编译器不接受这样的语法。
有人能帮忙吗?
2条答案
按热度按时间8ftvxx2r1#
default(double)
是0,但default(double?)
是null
。所以你可以用List<double?>
代替List<double>
字符串
如果修改会带来困难,您可以在处理时始终转换为
double?
:型
ig9co6j12#
您可以使用
Cast<double?>
将枚举器的类型更改为nullable,因此默认值为null
。字符串