我有一些linq代码,有时候null:
cbo3.ItemsSource = empty.Union(from a in
(from b in CompleteData
select b.TourOpID).Distinct()
select new ComboBoxItemString() { ValueString = a.Value.ToString() });
Run Code Online (Sandbox Code Playgroud)
但TourOpID有时会null抛出错误a.Value.ToString().我该如何解决这个问题?
Hei*_*nzi 18
因为您访问出现此问题Value属性一个的Nullable类型,是null(或者,更准确地说,它的HasValue性质是false).如何解决这个问题取决于你想要做什么:
如果要过滤掉TourOpIDnull的项,只需添加一个where子句:
...
(from b in CompleteData
where b.TourOpID != null // filter
select b.TourOpID).Distinct()
...
Run Code Online (Sandbox Code Playgroud)如果要使用替换值,例如0if TourOpID为null,请使用null coalescing运算符 ??,该运算符将您int?转换为int:
...
(from b in CompleteData
select b.TourOpID ?? 0).Distinct()
...
Run Code Online (Sandbox Code Playgroud)
或者,或者,
...
select new ComboBoxItemString() { ValueString = a.GetValueOrDefault().ToString() });
Run Code Online (Sandbox Code Playgroud)如果您只想显示一个不同的ComboBox条目,如果TourOpID为null,请使用三元运算符?::
...
select new ComboBoxItemString() {
ValueString = (a == null ? "no tour operator" : a.Value.ToString())
});
Run Code Online (Sandbox Code Playgroud)
如果要显示空字符串,如果a为null,则解决方案更简单:
...
select new ComboBoxItemString() { ValueString = a.ToString() });
Run Code Online (Sandbox Code Playgroud)
因为Nullable.ToString返回一个空字符串,如果它没有值.