我想知道在C#中,当函数中的if条件不为真时,我可以返回0。
for ( i = 0; *(s+i) != '/0'; i++)
这显示错误,因为我无法像这样返回0.
当然我可以做类似
的事情for ( i = 0; *(s+i) != '\0'; i++)
但我希望有更好的解决方案。 有什么想法吗?
答案 0 :(得分:7)
让它可以为空。
char? Foo(int a)
{
if(a>0)
return 'a';
else
return null;
}
这样,您就可以获得有效的char
或null
,这样就可以区分这两种情况而不会产生歧义。
答案 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
}