私は次のものを持っています:
if (model.PartitionKey.Substring(2, 2) == "05" ||
model.PartitionKey.Substring(2, 2) == "06")
私はもっとこのようなものを持っています。model.PartitionKeyを2回繰り返す必要がない、これをコーディングするためのよりクリーンな方法はありますか?
私は次のものを持っています:
if (model.PartitionKey.Substring(2, 2) == "05" ||
model.PartitionKey.Substring(2, 2) == "06")
私はもっとこのようなものを持っています。model.PartitionKeyを2回繰り返す必要がない、これをコーディングするためのよりクリーンな方法はありますか?
これはどうですか:
if (new string[]{"05", "06"}.Contains(model.PartitionKey.Substring(2, 2))
// ...
これにより、探している文字列を素敵なリストに自由に保持できます...
var lookingFor = new string[]{"05", "06"};
var substring = model.PartitionKey.Substring(2, 2);
if (lookingFor.Contains(substring))
{
// ...
}
これは、探している文字列のリストが 2 つよりも長くなる場合に非常に役立ちます...また、これをセット ( HashSet<string>
) に追加して、より効率的なルックアップを行うことができます - ただし、オーバーヘッドがゲインを食いつぶす可能性があるため、最初にこれをテストしてください.
そのような場合には、拡張メソッドを使用します
public static bool In<T>(this T source, params T[] list)
{
if (source = null)
throw new NullReferenceException("Source is Null");
return list.Contains(source);
}
そしてそれを次のように呼び出します
if (model.PartitionKey.Substring(2, 2).In("05", "06"))
拡張メソッドであるため、次のようなすべてのタイプに対して呼び出すことができます
if(myintegervariable.In(3, 4));
また
if(mybytevariable.In(23, 56, 34, 43, 87, 155));
var keyString = model.PartitionKey.Substring(2, 2);
if (keyString == "05" || keyString == "06")
{
// ...
}
代替案として誰もスイッチを提供しなかったことに驚いています:)
switch (model.PartitionKey.SubString(2,2)) {
case "05":
case "06":
// do stuff
break;
// other cases
default:
// like an else
}
詳細については、MSDNを参照してください。
サブストリングを変数に保存できます。
var substring = model.PartitionKey.Substring(2, 2);
if (substring == "05" || substring == "06")
または、正規表現を使用できます。
if (Regex.IsMatch("^..0[56]", model.PartitionKey))
これはおそらく、コードを読んでいるときに正規表現をどれだけ簡単に理解できるかに少し依存します。
Substring
読みやすくするために、 out を変数に抽出してから、次のことをテストできます。
var partitionKeyBits = model.PartitionKey.Substring(2, 2);
if (partitionKeyBits == "05" || partitionKeyBits == "06") {
}
しかし、そうでなければそれはそれについてです。
if (new []{"05", "06"}.Contains(model.PartitionKey.Substring(2, 2))
構文はかなりずれている可能性があります。修正を歓迎します:)
編集:new []