方法返回类型

时间:2011-11-17 18:57:09

标签: c#

我是C#的新手,我正试图找出测试方法是否正确返回的最佳方法,即;该方法是否获得了我想要的信息。

正是使这种困难的类型。有没有办法让我有时会回归bool,有时还会返回别的东西?

在PHP中我会像这样创建我的函数

function myFunc(){
    //Do Stuff
    if(/*whatever*/) return (string) "abcdefg";
    return false; //otherwise it will just return false
}

然后像这样调用它来测试它是否有效

if(!$var=myFunc()) die("It Didn't Work");
echo $var;

但是使用C#,我的函数必须返回一个指定的类型,而不是字符串或bool false,如果它没有用完。

如果在C#中我有一个返回IntPtr的方法,我可以让它返回(IntPtr) 0而不是false,但这很麻烦,而且可能有更好的方法。

任何想法?在C#中执行此操作的标准和常用方法是什么?

6 个答案:

答案 0 :(得分:6)

这里通常有两种方法:

  1. 使用Exceptions
  2. 使用TryXXX方法。
  3. 适当的方法取决于这是做什么的。如果“假”案件确实是特殊情况而非常态,那么提出异常是处理它的适当方式。

    但是,如果你正在做一些像解析用户输入这样的事情,那就是你会“失败”,那么使用TryXXX方法就是一个很好的例子。这看起来像是:

    bool TryMyFunc(out string result)
    {
         if (...)
         {
             result = "abcdefg";
             return true;
         }
    
         result = string.Empty;
         return false;
    }
    

    这就是Int32.TryParse在框架中的工作方式,例如。

答案 1 :(得分:4)

您始终可以返回null。

string Foo()
{
    if (!success) return null;
    return "abcd";
}

然后检查这样的电话:

var tmp = Foo();
if (tmp == null) return -1;
// tmp is a string so do your work

null返回只能用于object,遗憾的是你不能用int做。在这种情况下抛出异常或使用可空的int:

int? Bar()

答案 2 :(得分:1)

在您的示例中,我将从C#中的函数返回null:

public string myFunc(){
    //Do Stuff
    if(/*whatever*/) return "abcdefg";
    return null;
}

然后在你的主叫代码中:

string myVar = myFunc();

if(null != myVar)
{
    throw new Exception();
}

Console.WriteLine(myVar);

应该注意的是,无论何时你为非特殊情况抛出异常(意味着,如果你对myFunc的调用在合理使用中可以返回null),你将会受到严重的性能损失。生成异常需要很长时间,因此通常最好避免它们,可能是在调用myFunc之前使用先决条件检查。

在您处理非可空值类型的情况下,C#有一个名为Nullable Types的概念。

答案 3 :(得分:1)

如果你的意图是如何返回类型,你可以使用元组<>

public Tuple<string,bool> myFunc()
{
    //Do Stuff
    if(/*whatever*/) return (string) new Tuple<string,bool>("abcdefg",true);
    return new Tuple<string,bool>(null,false);
}

答案 4 :(得分:0)

使用基于异常的编程:

public string Blah()
{
    if (whatever)
    {
        return "abcdefg";
    }
    throw new Exception("Something went wrong");
}

或者你可以返回null或string.Empty

答案 5 :(得分:0)

就个人而言,我更喜欢使用null。

public string foo()
{
    if (whatever)
    {
        return "abc"; 
    }

    return null; 
}

然后:

 if(foo() != null) 
  {
    //do something  
  }
  else 
  {
   // *It Didn't Work*
  }