在方法中打破标记

时间:2009-08-17 15:46:46

标签: c# switch-statement break

我有一个反复执行某些逻辑的switch语句。而不是使用剪切和粘贴我想将它放入一个函数中,但我在这方面做得很糟糕。

这是我想要做的,但它不能编译,因为函数中的break标记不存在。任何人都可以将其重构为更好的工作版本吗?

switch(param.ToString())
{
  case "1":
  BreakIfNotArgumentType<B>(param);
 //do stuff
  break;
  case "2":
  BreakIfNotArgumentType<BF>(param);
 //do stuff
  break;
}

   private T BreakIfNotArgumentType<T>(object argumentObject)
    {
        if (argumentObject is T)
        {
            return (T)argumentObject;
        }
        else
        {
            break;
        }            
    }

4 个答案:

答案 0 :(得分:2)

您的功能基本上是复制as运算符的功能。

string foo = "foo";

....

object a = foo;
object b = 12;
....

string bar = a as string; // will give you "foo"
string zed = b as string; // returns null

as运算符用作运行时安全转换。如果无法将目标实例强制转换为目标类型,则会分配空引用。因此,它只适用于引用类型。最常见的用法就是这样......

string bar = a as string;

if(bar != null)
{
    // do stuff
}

因为这会在一个语句中提供类型检查和转换操作。

您应该发布switch声明,我们可以更好地简化它。尝试编写一个真正的内联函数(你希望它将函数中的代码替换为switch语句,这使得它更像是一个宏而不是一个函数)将不起作用。

答案 1 :(得分:0)

如果参数不能被强制转换,你可以让函数返回null,或者就如何处理代码部分的几个想法抛出异常。

   private T BreakIfNotArgumentType<T>(object argumentObject)
    {
        if (argumentObject is T)
        {
            return (T)argumentObject;
        }
        else
        {
            return null;
        }            
    }

或者

   private T BreakIfNotArgumentType<T>(object argumentObject)
    {
        if (argumentObject is T)
        {
            return (T)argumentObject;
        }
        else
        {
            throw CustomException("Argument wasn't valid!");
        }            
    }

答案 2 :(得分:0)

让你的方法返回一个布尔值并检查返回值:

switch(param.ToString())
{
  case "1":
  if (CheckForArgumentType<B>(param))
  {
   // Do your cast here
   param = (B)param
  }
  else
     break;
  case "2":
  if (CheckForArgumentType<B>(param))
  {
   // Do your cast here
   param = (B)param
  }
  else
     break;
  }
  .................

   private bool CheckForArgumentType<T>(object argumentObject)
    {
        return (argumentObject is T)

    }

答案 3 :(得分:0)

如果您只有2个值可供比较 - 请使用IF语句