我试图使字典的大小写不敏感。但是,我宣布它是一种财产,我怎么能让它变得不敏感呢。
我知道在定义时,我可以像这样使用它:
var dict = new Dictionary<string, YourClass>(
StringComparer.InvariantCultureIgnoreCase);
但是,我在接口和类中分别定义了它,比如
IDictionary<string, string> dict { get; }
public Dictionary<string, string> dict { get; set; }
我怎么能让这个案子变得麻木不仁呢?
不能。比较器是只读属性(https://msdn.microsoft.com/en-us/library/ms132092(v=vs.110)。aspx)。在构建对象的过程中声明比较器。
允许在运行时更改比较器将是一个严重的问题,因为它可能会导致突然的键冲突,这将需要重新构造字典。
在类或接口级别强制执行它的唯一方法是创建一个新的派生类型并使用该类型。
public class CaseInsensitiveDictionary<TValue> : Dictionary<string, TValue>
{
public CaseInsensitiveDictionary() : base(StringComparer.InvariantCultureIgnoreCase)
{
}
}
那么在你的界面中你会做
CaseInsensitiveDictionary<YourClass> { get; }
你提到你在你的课上定义它,比如:
public Dictionary<string, string> dict { get; set; }
因此,不要对自动属性使用缩写形式,而是使用完整形式:
Dictionary<string, string> _dict = new Dictionary<string, string>(
StringComparer.InvariantCultureIgnoreCase);
public Dictionary<string, string> dict
{
get { return _dict; }
set { _dict = value; }
}
如果您使用的是C#6.0,您甚至可以使用新的自动属性初始值设定项语法编写它:
public Dictionary<string, string> dict { get; set; } = new Dictionary<string, string>(
StringComparer.InvariantCultureIgnoreCase);
链接:
我需要一个像
问题内容: 我希望我的字典不区分大小写。 我有以下示例代码: 输出=练习更改颜色 我想要另一个字符串,(以大写字母开头)也给出相同的输出。 我相信有一种使用转换为小写字母的通用方法, 但是我不确定如何将其最好地集成到我的现有代码中。(如果无论如何这将是一种合理,简单的方法)。 问题答案: 如果我对您的理解正确,并且希望以一种不区分大小写的方式键入字典的键,则一种方法是将dict子类化并重载sett
我有一本区分大小写的字典, 所以我可以在这本字典里找到区分大小写的键。 例如,我可以有下面的键值对, {test,10} {测试,20} {test1,30} {test2,40} ... 当有人传递密钥时,我想检索该值。检索应该部分不区分大小写,这意味着,如果匹配准确的大小写,则返回区分大小写的结果,如果区分大小写的键不存在,则检索区分大小写的键值。 例如,在字典中插入上述值 如果用户通过“测试
问题内容: 默认情况下,单词“ Word”和“ word”不相同。如何使Lucene不区分大小写? 问题答案: 最简单的方法是降低所有可搜索的内容以及查询的大小写。请参阅 文档。您也可以将查询用于不区分大小写的搜索,因为它绕过了。 如果需要,您可以将内容存储在不同的字段中以捕获不同的案例配置。
问题内容: 如何更改strpos以使其不区分大小写。原因是如果的名称是 MadBike ,而搜索字词是 bike ,则该链接不会向我显示。我主要关心的是代码的速度。 问题答案: 您正在寻找 如果您无法使用该功能,则只需先调用两个字符串即可。 编辑 : 如果要查找带有变音符号的子字符串,将无法正常工作。 例如: 返回,但应该返回。
考虑: 我试图在每边只显示100个字符,中间是搜索字符串。 这段代码实际上可以工作,但它是区分大小写的。如何使其不区分大小写?