首页 新闻 会员 周边

如何让字符串数组的Contains()忽略大小写

0
悬赏园豆:20 [已解决问题] 解决于 2014-07-29 16:38

假设一个字符串数组:

var stringArray = "a,b,c,".Split(',');

在调用LINQ的Contains()方法时,默认是区分大小写的:

stringArray.Contains("A");

如何让之不区分大小写?

dudu的主页 dudu | 高人七级 | 园豆:30979
提问于:2014-07-20 13:11
< >
分享
最佳答案
2

最简单的解决方法:

stringArray.Contains("A", StringComparer.OrdinalIgnoreCase);
dudu | 高人七级 |园豆:30979 | 2014-07-29 16:37
其他回答(5)
-6

stringArray.Contains("A") || stringArray.Contains("a")

刘宏玺 | 园豆:14020 (专家六级) | 2014-07-20 13:39
0
//var stringArray = ("A,B,C,").ToUpper().Split(',');
//或者
//var stringArray = ("a,b,c,").ToLower().Split(',');
//没必要纠结其他的了吧,难道还去实现IEqualityComparer<String>啊
写代码的小2B | 园豆:4371 (老鸟四级) | 2014-07-20 15:37

就是不想每次手工进行大小写转换

支持(0) 反对(0) dudu | 园豆:30979 (高人七级) | 2014-07-20 18:06
0

首先感谢一下DUDU,让我下午还能研究一点东东,贴上代码如下,是VB的,凑合着看吧。

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim myString = "a,b,c".Split(",")

Dim ignoreCaseComparer As IgnoreCaseComparer = New IgnoreCaseComparer()

MessageBox.Show(myString.Contains("a", ignoreCaseComparer))
MessageBox.Show(myString.Contains("B", ignoreCaseComparer))

End Sub

Class IgnoreCaseComparer
Implements IEqualityComparer(Of String)

Public myComparer As CaseInsensitiveComparer

Public Sub New()
myComparer = CaseInsensitiveComparer.DefaultInvariant
End Sub

Public Sub New(myCulture As CultureInfo)
myComparer = New CaseInsensitiveComparer(myCulture)
End Sub

#Region "IEqualityComparer<string> Members"
Public Overloads Function Equals(x As String, y As String) As Boolean Implements IEqualityComparer(Of String).Equals
If myComparer.Compare(x, y) = 0 Then
Return True
Else
Return False
End If
End Function

Public Overloads Function GetHashCode(obj As String) As Integer Implements IEqualityComparer(Of String).GetHashCode
Return obj.ToLower().GetHashCode()
End Function
#End Region

End Class

End Class

收获园豆:20
爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-20 16:19

嗯,实现IEqualityComparer<string>接口是解决之道,有没有更简单的方法呢?

支持(0) 反对(0) dudu | 园豆:30979 (高人七级) | 2014-07-20 18:11

@dudu: 

找了一下,本来希望能在CultureInfo.CurrentCulture中找到设置当前比较方法默认值的选项,

很遗憾,没有找到,你可以到MSDN上找微软提下建议,

我也希望能够通过这样一句语句

CultureInfo.CurrentCulture.CompareInfo.IgnoreCase=true

然后整个软件就是这样了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2014-07-21 10:08
0

这个直接自定义一个比较器吧~要不然就需要先转换大小写~

幻天芒 | 园豆:37175 (高人七级) | 2014-07-21 09:53
0

先把对象中的值转成大写或者小写,再使用Contains就不用判断了。

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-07-21 11:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册