将带有To和Is的Select Case转换为c#问题

时间:2010-11-30 17:15:13

标签: c# vb.net

我将convertng vb.net改为c#2010作为我的工作,我所拥有的任何自动工具都不能完全成功。在特例中,这种情况:

'searchString is a string paramter from a long method
Select Case searchString
   Case "paid"
      'Do something long here
   Case "oaaaaa" To "ozzzzzz", "maaaaaa" To "mzzzzzz"
      'Do other long code
   Case Else
      'other long code
End Select

在此之前我主要是java开发人员,因此对于c#而言并不是很好,而对于vb.net则没有。我不明白“oaaaa to ....”部分,这部分不是转换。你能指点我到正确的地方找到它的c#版本吗?

4 个答案:

答案 0 :(得分:3)

在C#中没有直接的等价物,但您可以使用以下内容轻松实现相同的语义(具有更易读的代码!):

if(searchString == "paid") {
    // do something here
}
else if(
    searchString.IsInRange("oaaaaa", "ozzzzzz") ||
    searchString.IsInRange("maaaaa", "mzzzzzz")
) {
    // do other long code
}
else {
    // other long code
}

public static class StringExtensions {
    public static bool IsInRange(this string s, string lower, string upper) {
    if(String.Compare(lower, upper) > 0) {
        throw new InvalidOperationException();
    }
    return String.Compare(s, lower) >= 0 && String.Compare(s, upper) <= 0
}

答案 1 :(得分:2)

没有Case "xxx" To "yyy"语法的直接C#等价物。我想最近的翻译可能是if / else if / else堆栈:

if (seachString == "paid")
{
    // do something long here
}
else if (((searchString.CompareTo("oaaaaaa") >= 0) && (searchString.CompareTo("ozzzzzz") <= 0))
         || ((searchString.CompareTo("maaaaaa") >= 0) && (searchString.CompareTo("mzzzzzz") <= 0)))
{
    // do other long code
}
else
{
    // other long code
}

答案 2 :(得分:1)

C#似乎没有Case的概念...... To。见http://msdn.microsoft.com/en-us/library/cy37t14y(VS.80).aspx。 C#示例说“不支持此语言”。

答案 3 :(得分:0)

bitwise有答案,但这里是翻译后的代码(就像javascript一样):

switch (searchString){
   case: "paid"
      'Do something long here
      break;
   case: "oaaaaa" To "ozzzzzz", "maaaaaa" To "mzzzzzz"
      'Do other long code
      break;
   default:
      'other long code
      break;
}