我有以下代码用于创建静态元素列表,并通过Id检索它们:
Private Shared Property SubStructTypes As IList(Of SubstructureType)
Shared Sub New()
SubStructTypes = New List(Of SubstructureType) From {
New SubstructureType With {.Id = "PURLIN", .Description = "Purlin"},
New SubstructureType With {.Id = "METALDECKING", .Description = "Metal Decking"},
New SubstructureType With {.Id = "WOODDECKING", .Description = "Wood Decking"}
}
End Sub
Public Shared Function GetById(ByVal myId As String) As SubstructureType
If String.IsNullOrWhiteSpace(myId) Then
Return Nothing
End If
Dim straightCompare = SubStructTypes.SingleOrDefault(Function(subStruct) subStruct.Id = myId)
Dim howIsThisFindingAnything = SubStructTypes.SingleOrDefault(Function(subStruct) subStruct.Id.ToUpper() = myId.ToLower())
Return SubStructTypes.SingleOrDefault(Function(subStruct) subStruct.Id.ToLower() = myId.ToLower())
End Function
这个类并没有什么特别之处:
<Serializable>
Public Class SubstructureType
Public Property Id As String
Public Property Description As String
End Class
当传入一个Id时,SingleOrDefault方法会在列表中找到该值,而不管字符串大小写。如下面的截图所示: 问题: 为什么调用集合上的SingleOrDefault方法来过滤Id值时,即使大小写不同(例如“Purlin”与“PURLIN”),也能找到列表中的元素?这在我的howIsThisFindingAnything变量中明显可见,我明确更改了大小写。
注意: - SingleOrDefault使用标准的.NET调用。 - 框架版本:.NET 4