いいえ、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
か?