我在C#中有一个条件如下:
if( myString.Contains("UCK") OR
myString.Contains("SAN") OR
myString.Contains("AVB") OR
myString.Contains("AVM") OR
myString.Contains("SDS") OR
myString.Contains("DWW") OR
myString.Contains("WQP") OR
myString.Contains("LHG") OR
)
{
mySecondString = "CATEGORY A";
}
else if( myString.Contains("UCT") OR
myString.Contains("SAM") OR
myString.Contains("AHJB") OR
myString.Contains("AVR") OR
)
{
mySecondString = "CATEGORY B";
}
else if( myString.Contains("UKC") OR
myString.Contains("SHZ") OR
myString.Contains("EEB") OR
)
{
mySecondString = "CATEGORY C";
}
else mySecondString = "CATEGORY D";
我想让它变得更专业。你建议的最佳方式是什么?
由于
答案 0 :(得分:7)
com.ibm.worklight.*
这样称呼:
docker pull myimage:staging
docker run myimage:staging test
docker tag myimage:staging myimage:release
docker push myimage:release
答案 1 :(得分:4)
虽然我喜欢安德森先生的扩展方法解决方案,但如果你只是想让它快速而又肮脏:
if (new[] { "UCK", "SAN", "AVB", "AVM", "SDS", "DWW", "WQP", "LHG" }.Any(s => myString.Contains(s)))
{
mySecondString = "CATEGORY A";
}
else if (new[] { "UCT", "SAM", "AHJB", "AVR" }.Any(s => myString.Contains(s)))
{
mySecondString = "CATEGORY B";
}
else if (new[] { "UKC", "SHZ", "EEB" }.Any(s => myString.Contains(s)))
{
mySecondString = "CATEGORY C";
}
else
{
mySecondString = "CATEGORY D";
}
答案 2 :(得分:3)
可以使用Regular Expression我不是最好的正则表达式制作者:
if (Regex.IsMatch(myString, "/(LHG)|(UCK)|(SAN)|(AVB)|(AVM)|(SDS)|(DWW)|(WQP)/")) {
mySecondString = "CATEGORY A";
} else ...
Here是测试C#正则表达式的好地方
答案 3 :(得分:1)
我认为最好的方法是在C#中使用Map
(在Java中)或Dictionary
:
class MyExample {
// declaring your static map (should be private static final)
private static Dictionary<String, String> myPreciousMap = new HashMap<>();
public MyExample() {
String categoryA = "CATEGORY A";
String categoryX = "CATEGORY X"; // you know, A, B, C, D etc
myPreciousMap.Add("UCK", categoryA);
myPreciousMap.Add("SAN", categoryA);
myPreciousMap.Add("X", categoryX);
}
// using it
public String getCategory(String myString) {
// this returns exact match (which is recommended)
// return myPreciousMap.GetValue(myString);
// this is using the contains
foreach( KeyValuePair<string, string> kvp in myPreciousMap) {
if (myString.contains(kvp.getKey()) return kvp.getValue();
}
return "Some sort of Default";
}
}
通过这种方式,您可以避免所有ifs,并且可以非常轻松地查看相应的值并对其进行编辑。
答案 4 :(得分:0)
这是使用扩展程序的建议的补充,但无论您是否这样做都适用:
如果您的病情很长,您应该将其隔离在自己的功能中,例如:
string GetCategory(string input)
{
//all of your conditions
return mySecondString;
}
然后在用于包含此条件的方法中,您只需要调用函数调用,例如
var category = GetCategory(myString);
这做了一些事情:
GetCategory
的调用,并了解您正在获得该类别。类似地,当他们查看GetCategory
函数本身时,他们将从其所在函数的名称中理解该代码的用途。另一个建议 - 使用常量,如
const string AliensVersusBovines = "AVB";
这会阻止某人阅读此内容:
myString.Contains("AVB")
并想知道“AVB”是什么,因为它不是不言自明的。如果你要在多个类中使用该字符串(这似乎很可能),那么你可以创建一个单独的类,它只包含所有这些常量。这使您无法在代码中分散相同的字符串文字,这可能会成为维护问题。
public class Codes
{
public const string AliensVersusBovines = "AVB";
}
这样你的代码可以读取
myString.Contains(Codes.AliensVersusBovines)