我有以下内容:
if (model.PartitionKey.Substring(2, 2) == "05" ||
model.PartitionKey.Substring(2, 2) == "06")
我更喜欢这个。是否有更简洁的方法来编码,我不必重复model.PartitionKey两次?
答案 0 :(得分:11)
这个怎么样:
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))
{
// ...
}
如果您要查找的字符串列表长度超过两个,这将有很大帮助...此外,您可以将其添加到集合(HashSet<string>
)以便更有效地查找 - 但是测试一下首先,由于管理费用会增加收益。
答案 1 :(得分:9)
对于这种情况,我使用扩展方法
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));
OR
if(mybytevariable.In(23, 56, 34, 43, 87, 155));
答案 2 :(得分:7)
var keyString = model.PartitionKey.Substring(2, 2);
if (keyString == "05" || keyString == "06")
{
// ...
}
答案 3 :(得分:5)
我很惊讶没有人提供开关作为可能的选择:)
switch (model.PartitionKey.SubString(2,2)) {
case "05":
case "06":
// do stuff
break;
// other cases
default:
// like an else
}
您可以在MSDN
了解更多相关信息答案 4 :(得分:3)
您可以将子字符串保存在变量中:
var substring = model.PartitionKey.Substring(2, 2);
if (substring == "05" || substring == "06")
或者您可以使用正则表达式:
if (Regex.IsMatch("^..0[56]", model.PartitionKey))
这可能取决于您在阅读代码时能够轻松理解正则表达式。
答案 5 :(得分:1)
为了提高可读性,您可以将Substring
提取到变量中,然后测试:
var partitionKeyBits = model.PartitionKey.Substring(2, 2);
if (partitionKeyBits == "05" || partitionKeyBits == "06") {
}
但除此之外是关于它的。
答案 6 :(得分:0)
if (new []{"05", "06"}.Contains(model.PartitionKey.Substring(2, 2))
语法可能很遥远,欢迎更正:)
修改:new []