不,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.
}
隐式转换运算符允许您编写如下代码:
Foo("Hello world.");
void Foo(LowerCaseString text)
{
Console.WriteLine(text);
}
虽然这如您所料,但这种方法有一些缺点:
对性能的影响很小(可能可以忽略不计),因为必须在字符串周围实例化包装器对象。
对于您的代码的其他用户来说,存在隐式转换运算符可能并不明显,因此他们最终new LowerCaseString("Hello world.")
改为编写代码。如果您的团队经常使用它,使用 Visual Studio 的对象浏览器查看该类可能会解决此问题。
此包装器不允许您指定CultureInfo
用于.ToLower()
. 您想使用CurrentCulture
, 或InvariantCulture
, 还是其他?