如果返回类型是例如char,如何返回0

时间:2015-07-31 07:59:44

标签: c# types return-type

我想知道在C#中,当函数中的if条件不为真时,我可以返回0。

for ( i = 0; *(s+i) != '/0'; i++)

这显示错误,因为我无法像这样返回0.

当然我可以做类似

的事情
for ( i = 0; *(s+i) != '\0'; i++)

但我希望有更好的解决方案。 有什么想法吗?

5 个答案:

答案 0 :(得分:7)

让它可以为空。

char? Foo(int a)
{
    if(a>0)
        return 'a';
    else
        return null;
}

这样,您就可以获得有效的charnull,这样就可以区分这两种情况而不会产生歧义。

答案 1 :(得分:2)

如果else部分是例外情况并且Exception

char Foo(int a)
{  
if(a>0)
    return 'a';
else
    throw new Exception("YOUR ERROR MESSAGE");
}

如果else部分可以更频繁地发生,则更改返回类型以返回可为空的char?

char? Foo(int a)
{  
if(a>0)
    return 'a';
else
    return null;
}

这样调用代码可以决定如何处理无效状态而无需使用try{}catch{}

答案 2 :(得分:2)

你可以做到

char Foo(int a)
{
  if ( a > 0 )
    return 'a';
  else
    return '\0';
    // or: throw new InvalidOperationException("ERROR MESSAGE!");
}

或使用out参数和bool作为返回类型

bool TryFoo(int a, out char outChar)
{
  if (a > 0)
  {
    outChar = 'a';
    return true;
  }
  outChar = '\0';
  return false;
}

答案 3 :(得分:0)

您可以返回默认值:

char Foo(int a)
{
    if (a > 0)
        return 'a';
    else
        return default(char);
}

答案 4 :(得分:0)

您可以使用Tester-Doer - apporach:

bool TryFoo(int a, out char val)
{
    if (a > 0) val = 'a';
    else a = default(char);

    return a > 0;
}

现在您可以先检查a是否是该方法的有效输入:

char val;
if (TryFoo(-5, out val)) 
{
    // do something with your value
}