我想问一下是否有一种方法可以像MSSQL一样缩短这个条件,因为我也有类似的编码。
if(docType == "PO" || docType == "II" || docType == "IA" || docType == "IT" || docType == "OV" || docType == "ID")
{
}
在MSSQL中
SELECT * FROM Documents WHERE docType IN ("PO","II","IA","IT","OV")
答案 0 :(得分:3)
您也可以在C#中构建一个数组:
if (new [] {"PO", "II", "IA", "IT", "IV"}.Contains(docType)) {
}
你也可以使用正则表达式:
if (Regex.IsMatch(docType, "PO|II|IA|IT|IV")) {
}
答案 1 :(得分:2)
执行此操作的一种方法是使用params关键字创建一个方法,为您处理它。这允许您传递任意数量的参数以及您正在检查的值
private bool IfContains(string needle, params string[] haystack)
{
bool match = false;
foreach(string val in haystack)
{
if(val == needle)
{
match = true;
break;
}
}
return match;
}
可以使用许多参数调用它,例如
if(IfContains("Hello", "Hi", "yo", "Hello"))
{
//DoStuff
}
答案 2 :(得分:1)
好:
var ids = new[] { "PO", "II", "IA", "IT", "OV", "ID" }
if (ids.Contains(docType)
{
}
你甚至可以使它不区分大小写:
var ids = new[] { "PO", "II", "IA", "IT", "OV", "ID" }
if (ids.Contains(docType, StringComparer.InvariantCultureIgnoreCase)
{
}
答案 3 :(得分:1)
是的,将它们放在一个数组中,只需执行一个包含
new[] {"a", "b", "c", "d"}.Contains(value)
而不是
if (value == "a" || value == "b" ...)
答案 4 :(得分:1)
您可以从列表中查看可用于查找列表中任何文档类型的内容:
var list = new List<string>(){"PO","II","IA","IT","OV"};
if(list.Any(x=>x == docType))
{
}
答案 5 :(得分:0)
所有其他答案都有效且不错, 我只想在这里做个原创。我经常在我的代码中使用以下技术来提高可读性并使用“真实的单词”。
我通常在命名上花费“更多时间”,可能是DocTypeIsValid,但我真的喜欢让我的bool函数以“has”或“is”开头。这里的重点是提高可重用性和可读性。
private bool IsDoctypeValid(string docType){
return docType == "PO" || docType == "II" || docType == "IT" || docType == "IV";
}
请注意,您可以使用其他答案中找到的技术(例如.Contains()
)并将其放在return方法中,它的工作原理相同:)我想指出的想法是提取方法中的if
,以便您可以在以后随处执行此操作:
if (IsDoctypeValid(docType)){
}
超小且超级可读。