我一直在看这个线程作为一种方式来创建一个"智能"用于连接字符串的方法。我有一组属性,其中的一些可能是零,在这种情况下,我想删除它们从过滤后的列表中使用字符串之前。连接方法。所以,我有这样的东西:
Dim filteredList = (New List(Of String) From {
a.ToString(),
b.ToString(),
c.ToString()
}).Where(Function(x) Not String.IsNullOrWhiteSpace(x))
Dim result As String = String.Join(" | ", filteredList)
在某些情况下,a
、b
和/或c
可能为空。当我运行这段代码时,我得到一个空引用异常,表示其中一个属性.get
没有返回任何内容,代码退出。有办法解决这个问题吗?
编辑
我想我可以通过检查a
,b
或c
是否为空来修复这个问题,然后将它们添加到这样的列表中:
Dim fullList = New List(Of String)
If a IsNot Nothing Then fullList.Add(a.ToString())
If b IsNot Nothing Then fullList.Add(b.ToString())
If c IsNot Nothing Then fullList.Add(c.ToString())
Dim filteredList = fullList.Where(Function(x) Not String.IsNullOrWhiteSpace(x))
Dim result As String = String.Join(" | ", filteredList)
这是处理这种情况的最好方法吗?或者有更优雅的方式吗?
在null对象上调用ToString()方法将导致NullReferenceException。
相反,您需要:
- 过滤器只返回非null的值
- 选择过滤集上ToString的值
- 然后加入
同样,也没有必要将数组转换为List。
。
Dim filteredList = { a, b, c }
.Where(Function(x) x IsNot Nothing)
.Select(Function(x) x.ToString())
Dim result As String = String.Join(" | ", filteredList)
示例:https://dotnetfiddle.net/Epwk3Q