相关疑难解决方法(0)

C#switch语句限制 - 为什么?

在编写switch语句时,在case语句中可以打开的内容似乎存在两个限制.

例如(是的,我知道,如果你正在做这种事情,这可能意味着你的面向对象(OO)架构是不确定的 - 这只是一个人为的例子!),

  Type t = typeof(int);

  switch (t) {

    case typeof(int):
      Console.WriteLine("int!");
      break;

    case typeof(string):
      Console.WriteLine("string!");
      break;

    default:
      Console.WriteLine("unknown!");
      break;
  }
Run Code Online (Sandbox Code Playgroud)

这里switch()语句失败,带有'一个预期的整数类型的值',case语句失败并带有'a expected value is expected'.

为什么会有这些限制,以及基本理由是什么?我看不出有任何理由switch语句具有只能屈从于静态分析,为什么在接通的值必须是完整的(即原语).理由是什么?

c# switch-statement

136
推荐指数
8
解决办法
10万
查看次数

switch语句:"预期值为常量"

目前我正在与那个"神奇的弦乐"问题作斗争:

public class MyDataField
{
    // class definition
}

// exuecuted method
public void SwitchMultipleDataFields()
{
    var myField = new MyDataField();
    switch(myField.GetType().ToString())
    {
        // only case, which works
        case "MyDataField":
            // case operations
            break;

        // other option:
        case typeof(MyDataField).ToString():
            // case operations
            break;

        // other cases of other FieldTypes
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我收到错误消息我写在我的线程标题中.我认为问题是这个字符串不是"非编译时"的常量.因此,要求切换的唯一可能方法是通过明确确定该案例字符串的值.我的问题只是我没有得到编译错误,以防我重命名MyDataField该类.因此,无论如何,这些类中有90%是通用的.这些是在defaultswitch语句中处理的.除了明确确定案例值的价值之外,还有其他方法吗?

请不要争论这种方法的意义.我刚刚写了这篇文章以便更简单地说明我的问题

c# switch-statement

2
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×2

switch-statement ×2