別の静的クラスまたはリソースに完全に抽象化します。
public static class MyStringResources
{
public static readonly string StringLiteral =
@"This {0} a really long string literal
I don't want {1} to have {2} at
the beginning of each line, so I have
to break the indentation of my program";
}
次のような使い方で:
stringLiteral = String.Format(MyStringResources.StringLiteral, var1, var2, var3);
さらに良いことに、このようにして、予想される変数の数を必要とする素敵な関数を作成できます。
public static class MyStringLiteralBuilder
{
private static readonly string StringLiteral =
@"This {0} a really long string literal
I don't want {1} to have {2} at
the beginning of each line, so I have
to break the indentation of my program";
public static string Build(object var1, object var2, object var3)
{
return String.Format(MyStringResources.StringLiteral, var1, var2, var3);
}
}
そうすれば、誤って変数を見逃すことはありません (そして、数値やブール値などに強くタイプすることさえあります)。
stringLiteral = MyStringLiteralBuilder.Build(var1, var2, var3);
stringLiteral = MyStringLiteralBuilder.Build(var1, var2); //compiler error!
もちろん、この時点で、これらのビルダーを使用してほとんど何でも行うことができます。プログラムにある特別な大きな「stringLiteral」ごとに新しいビルダーを作成します。たぶん、それらを持つ代わりにstatic
、キープロパティを取得/設定できるインスタンスにすることができます。その後、それらに素敵な名前を付けることもできます:
public class InfoCardSummary
{
public string Name { get; set; }
public double Age { get; set; }
public string Occupation { get; set; }
private static readonly string FormattingString =
@"This person named {0} is a pretty
sweet programmer. Even though they're only
{1}, Acme company is thinking of hiring
them as a {2}.";
public string Output()
{
return String.Format(FormattingString, Name, Age, Occupation);
}
}
var info = new InfoCardSummary { Name = "Kevin DiTraglia", Age = 900, Occupation = "Professional Kite Flier" };
output = info.Output();