考虑下面的课程
- 我可以做任何事情来实现不区分大小写的字符串吗?
public class Attibute
{
// The Name should be case-insensitive
public string Name
{
get;
set;
}
public Attibute()
{
}
}
public class ClassWithAttributes
{
private List<Attributes> _attributes;
public ClassWithAttributes(){}
public AddAttribute(Attribute attribute)
{
// Whats the best way to implement the check?
_attributes.add(attribute);
}
}
Structure of an HTML 4 Document
我已经将课程编辑为更客观和具体的
答案 0 :(得分:2)
您不能拥有不区分大小写的属性 - 您只能进行不区分大小写的操作,例如比较。如果有人访问XHtmlOneDTDElementAttibute.Name,他们将返回一个字符串,无论它创建的是什么情况。
每当使用.Name时,您都可以忽略字符串的大小写来实现该方法。
答案 1 :(得分:2)
在回答重组后的问题时,您可以这样做:
public class Attribute { public string Name { get; set; } }
public class AttributeCollection : KeyedCollection<string, Attribute> {
public AttributeCollection() : base(StringComparer.OrdinalIgnoreCase) { }
protected override string GetKeyForItem(Attribute item) { return item.Name; }
}
public class ClassWithAttributes {
private AttributeCollection _attributes;
public void AddAttribute(Attribute attribute) {
_attributes.Add(attribute);
//KeyedCollection will throw an exception
//if there is already an attribute with
//the same (case insensitive) name.
}
}
如果你使用它,你应该使Attribute.Name
只读,或者只要它被改变就调用ChangeKeyForItem。
答案 2 :(得分:1)
这取决于你要对字符串做什么。
如果您想比较字符串而不管情况如何,请使用String.Equals
致电StringComparison.OrdinalIgnoreCase
。
如果要将它们放在字典中,请创建字典的比较器StringComparer.OrdinalIgnoreCase
。
因此,您可以按如下方式创建一个函数:
public class XHtmlOneDTDElementAttibute : ElementRegion {
public bool IsTag(string tag) {
return Name.Equals(tag, StringComparison.OrdinalIgnoreCase);
}
// The Name should be case-insensitive
public string Name { get; set; }
// The Value should be case-sensitive
public string Value { get; set; }
}
如果您想要更具体的解决方案,请告诉我您使用Name
属性做了什么
答案 3 :(得分:1)
嗯,在看了一下规范后,我对此的看法是,你不需要做任何事情来使字符串属性不区分大小写。无论如何,这个概念并没有多大意义:字符串不区分大小写或不敏感;对它们的操作(如搜索和排序)是。
(我知道W3C的HTML建议基本上就是这样说的。它的措辞非常糟糕。)
答案 4 :(得分:1)
或者,您可能希望使属性始终为大写,如下所示。
public class XHtmlOneDTDElementAttibute : ElementRegion {
string name;
// The Name should be case-insensitive
public string Name {
get { return name; }
set { name = value.ToUpperInvariant(); }
}
// The Value should be case-sensitive
public string Value { get; set; }
}