の値を変更するのString.Empty
は悪い考えであることは理解していますが、なぜそれができないのかわかりません。
私が言いたいことを理解するには、次のクラスを検討してください。
public class SomeContext
{
static SomeContext(){}
public static readonly string Green = "Green";
public static readonly SomeContext Instance = new SomeContext();
private SomeContext(){}
public readonly string Blue = "Blue";
public static void PrintValues()
{
Console.WriteLine(new { Green, Instance.Blue, String.Empty }.ToString());
}
}
これら 3 つの読み取り専用フィールドを操作しようとする小さなコンソール アプリがあります。Blue と Green を Pink にすることはできますが、Empty は同じままです。
SomeContext.PrintValues();
/// prints out : { Green = Green, Blue = Blue, Empty = }
typeof(SomeContext).GetField("Blue").SetValue(SomeContext.Instance, "Pink");
typeof(SomeContext).GetField("Green", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Pink");
typeof(String).GetField("Empty", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Pink");
SomeContext.PrintValues();
/// prints out : { Green = Pink, Blue = Pink, Empty = }
なんで?
String.Empty
もともと、定数ではない理由も尋ねました。別の投稿で質問のこの部分に対する回答を見つけ、質問のその部分を削除しました)。
注:「重複」のどれもこの問題に対する決定的な答えを持っていません。そのため、私はこの質問をしています。