C#Case-Insensitive String

时间:2009-05-31 21:10:50

标签: c# string case-insensitive

考虑下面的课程   - 我可以做任何事情来实现不区分大小写的字符串吗?

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

我已经将课程编辑为更客观和具体的

5 个答案:

答案 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; }
}