linq .Value Nullable Object必须有一个值。 怎么跳?
我有一些linq代码有时为null
:
cbo3.ItemsSource = empty.Union(from a in (from b in CompleteData select b.TourOpID).Distinct() select new ComboBoxItemString() { ValueString = a.Value.ToString() });
但TourOpID
有时会在a.Value.ToString()
上抛出错误。 我该如何解决这个问题?
出现此问题的原因是您访问Nullable
类型的Value
属性 ,该属性为null
(或者更准确地说,其HasValue
属性为false
)。 如何解决这个问题取决于你想要做什么:
-
如果要过滤掉
TourOpID
为null的项目,只需添加where
子句:... (from b in CompleteData where b.TourOpID != null // filter select b.TourOpID).Distinct() ...
-
如果要使用替换值,例如
0
,如果TourOpID
为null,请使用null合并运算符??
,转换你的int?
进入一个int
:... (from b in CompleteData select b.TourOpID ?? 0).Distinct() ...
或者,
... select new ComboBoxItemString() { ValueString = a.GetValueOrDefault().ToString() });
-
如果您只想在
TourOpID
为null时显示不同的ComboBox条目,请使用三元运算符?:
::... select new ComboBoxItemString() { ValueString = (a == null ? "no tour operator" : a.Value.ToString()) });
如果要显示空字符串,如果
a
为null,则解决方案甚至更简单:... select new ComboBoxItemString() { ValueString = a.ToString() });
因为Nullable.ToString返回一个空字符串,如果它没有值。
用where
from b in CompleteData where b.TourOpID != null select b.TourOpID
为什么不使用ValueString = a.ToString()
而不是ValueString = a.Value.ToString()
。 如果a
有一个值,它会将此值返回给字符串,否则 – a.ToString()
将返回空字符串。
IEnumerable arr = new List { 1m, 4m, null, 10m, 6m }; foreach (var @decimal in arr) { Console.WriteLine(@decimal.ToString()); }
输出是:
1 4 10 6