Null引用异常的字符串列表



我一直在看这个线程作为一种方式来创建一个"智能"用于连接字符串的方法。我有一组属性,其中的一些可能是零,在这种情况下,我想删除它们从过滤后的列表中使用字符串之前。连接方法。所以,我有这样的东西:

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)

在某些情况下,ab和/或c可能为空。当我运行这段代码时,我得到一个空引用异常,表示其中一个属性.get没有返回任何内容,代码退出。有办法解决这个问题吗?

编辑

我想我可以通过检查a,bc是否为空来修复这个问题,然后将它们添加到这样的列表中:

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。

相反,您需要:

  1. 过滤器只返回非null的值
  2. 选择过滤集上ToString的值
  3. 然后加入

同样,也没有必要将数组转换为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

相关内容

  • 没有找到相关文章

最新更新