【发布时间】:2014-03-18 16:46:21
【问题描述】:
我有以下代码来创建元素的静态列表并通过 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
【问题讨论】:
-
你在使用 linq 到实体吗? stackoverflow.com/questions/3843060/…
-
@Dleh 不,只是静态列表上的内存查询。
-
也许您应该尝试使用 String.Equals() 而不是 = 符号?我不太熟悉 VB 如何解释 =
-
@DLeh 你说得对,那行得通。默认情况下,VB.NET 不关心区分大小写吗?为了测试这一点,我添加了一个变量 Dim isTrue = "test" = "TEST" 并且表达式为真。