gpt4 book ai didi

.net - 不考虑字符串大小写的 VB.NET LINQ 查询

转载 作者:行者123 更新时间:2023-12-04 11:52:41 24 4
gpt4 key购买 nike

我有以下代码来创建元素的静态列表并通过 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 方法将在列表中查找值,而不管字符串大小写。这可以在下面的屏幕截图中看到:
enter image description here

问题 :
为什么在我的集合上调用 SingleOrDefault 来过滤掉查找列表中元素的 Id 值,即使大小写不同(即“Purlin”与“PURLIN”)。这在我的 howIsThisFindingAnything 中清晰可见我显式更改 shell 的变量。

笔记:
  • SingleOrDefault 正在使用标准的 .NET 调用
  • 框架版本:.NET 4
  • 最佳答案

    在 VB.Net 中有语句/项目编译选项:Option Compare .

    对此有两个选项:TextBinary .

    这可能是您在 Text 的某个地方配置了这个.

    根据您的环境的设置方式将决定默认情况下的设置方式。检查我的设置,我通常在项目设置中默认为二进制。

    区别在于(来自 MSDN here ):

    二进制:

    根据从字符的内部二进制表示派生的排序顺序进行字符串比较。
    这种类型的比较非常有用,特别是如果字符串可以包含不会被解释为文本的字符。在这种情况下,您不希望使用字母等价的比较偏向,例如不区分大小写。

    文字:

    根据系统区域设置确定的不区分大小写的文本排序顺序进行字符串比较。
    如果您的字符串包含所有文本字符,并且您希望在考虑字母等效性(例如不区分大小写和密切相关的字母)的情况下比较它们,则这种类型的比较非常有用。例如,您可能希望 A 和 a 相等,并且 Ä 和 ä 位于 B 和 b 之前。

    这些选项不仅对明显的相等场景有影响,而且对排序等领域也有影响。

    这可以在以下位置设置/默认:

  • 代码文件的最顶部
  • 项目默认设置在项目属性>>编译页面
  • 在选项 >> 项目和解决方案 >> VB 默认值页面中设置的新项目的默认值。

  • 我个人倾向于使用 Binary因为它的行为与其他语言(如 C#/Javascript 等)最相似,然后在我需要不区分大小写的相等性的地方显式编码。

    关于.net - 不考虑字符串大小写的 VB.NET LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22485759/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com