c#if语句,switch语句

时间:2019-06-04 06:44:57

标签: c#

让它变得更容易。在这种情况下,返回时会产生曲折。我应该在末尾键入什么以从该方法接收VK_F2作为返回值?

internal uint AssignStartShortcut()
    {
        switch (currentStartValue)
        {
            case "F2":
                return VK_F2;
        }
        return;// how this should look?
    }

如果我在swith之后不使用return,那么我会收到一条消息:并非所有代码路径都返回值。

3 个答案:

答案 0 :(得分:5)

您的错误很可能是

Compiler Error CS0165

  

使用未分配的局部变量“名称”

     

C#编译器不允许使用未初始化的变量。如果   编译器检测到可能没有使用过的变量   初始化后,它会生成编译器错误CS0165。了解更多信息,   请参阅字段。请注意,此错误是在编译器时生成的   遇到可能导致使用未分配的构造   变量,即使您的特定代码没有。这样可以避免   确定分配的规则过于复杂的必要性。

轻松修复,对其进行初始化

internal uint AssignStopShortcut()
{
   uint stopNumber = 0;
   switch (currentStartValue)
   ...

或者确保静态分析器知道它不能掉线(即始终被初始化)

uint stopNumber;

switch (currentStartValue)
{
   case "F3":
      stopNumber = VK_F3;

      return stopNumber; //squigly lines below
   default:
      // no other options
      throw new InvalidOperationException("Bazzinga!");
}

甚至更好,只需返回 constant ,而不使用局部变量

internal uint AssignStopShortcut()
{
   switch (currentStartValue)
   {
      case "F3":
         return VK_F3; //squigly lines below
      default:
         throw new InvalidOperationException("Bazzinga!");
   }
}

答案 1 :(得分:0)

在TheGeneral的解决方案中,您的问题是您需要初始化变量。

internal uint AssignStartShortcut()
{
    uint startNumber = 0; //initialise variable
    if (currentStartValue == "F2")
    {
        startNumber = VK_F2;
    }
    return startNumber; //value of 0 is returned if the IF statement conditon is not met.
}

从您的评论到TheGenral提出的解决方案,因为我还没有发表评论,这是因为在这种情况下,由于初始化变量设置为零,因此您仅在检查特定值,并且如果不满足该条件,则“ startNumber”不会使用“ VK_F2”或“ VK_F3”值进行更新。因此,这就是为什么Switch语句默认情况满足的原因,因为“ currentStartValue”没有任何情况。

例如,如果您想检查所有情况,它应该看起来像这样:

    internal uint AssignStopShortcut()
    {
        uint stopNumber = 0; //initialise this variable is a must if it's to be declared in this method.
        switch (currentStartValue)
        {
            case "F1": break;
            case "F2": break;
            case "F3":
                stopNumber = VK_F3;
                break;
            case "F4": break;
            case "F5": break;
            case "F6": break;
            case "F7": break;
            case "F8": break;
            default:
                // no other options
                throw new InvalidOperationException("Bazzinga!");
        }
        return stopNumber;
    }

希望这会有所帮助。

答案 2 :(得分:0)

感谢大家的帮助。问题解决了,它不在if或switch语句中。原来不是应该传递的数据。我的错。再次感谢。