C#自动将ToLower应用于方法字符串参数?

Hen*_*ese 3 c# tolower

有没有办法让C#编译器在方法中使用之前自动将ToLower()(或任何其他操作方法调用)应用于特定的方法参数?

//附加信息:其目的是使用具有不区分大小写的键的Dictionary.显然,我的第一种方法是完全错误的,因为我已经找到了一种完全不同的方法来解决字典本身,而不是它所访问的密钥.

我的错!我应该已经为你提供了这些信息.所以,不需要进一步的答案.无论如何,非常感谢!

在这种特殊情况下更好的方法:c#Dictionary:通过声明使Key不区分大小写

sta*_*ica 10

不,C#编译器不会为你做这个(为什么要根据这样一个特定的要求量身定做?),但你可以通过编写一个简单的包装struct来完成这个string:

struct LowerCaseString
{
    public LowerCaseString(string value)
    {
        this.value = value.ToLower();
    }

    private readonly string value;

    public static implicit operator LowerCaseString(string value)
    {
        return new LowerCaseString(value);
    }

    public override string ToString()
    {
        return value;
    }

    … // perhaps implement IEquatable<>, IComparable<>, etc.
}
Run Code Online (Sandbox Code Playgroud)

隐式转换运算符允许您编写如下代码:

Foo("Hello world.");

void Foo(LowerCaseString text)
{
    Console.WriteLine(text);
}
Run Code Online (Sandbox Code Playgroud)

虽然这可以按照您的预期运行,但这种方法存在一些缺点:

  • 一个很小的(可能是可以忽略的)性能命中,因为必须在你的字符串周围实例化包装器对象.

  • 您的代码的其他用户可能并不明显存在隐式转换运算符,因此他们最终会编写代码new LowerCaseString("Hello world.").如果您的团队经常使用它,使用Visual Studio的对象浏览器查看该类可能会解决此问题.

  • 此包装器不允许您指定CultureInfo用于.ToLower().你想使用CurrentCulture,或InvariantCulture,或其他一些?