我有一个如下所示的功能:
private static *bool* Function()
{
if(ok)
return UserId; //string
else
return false; //bool
}
有没有办法做到这一点?在stackoverflow中有一些像这样的问题,但我无法理解。
答案 0 :(得分:11)
似乎TryXXX模式在这种情况下是合适的:
private static bool TryFunction(out string id)
{
id = null;
if (ok)
{
id = UserId;
return true;
}
return false;
}
然后像这样使用:
string id;
if (TryFunction(out id))
{
// use the id here
}
else
{
// the function didn't return any id
}
或者你可以有一个模型:
public class MyModel
{
public bool Success { get; set; }
public string Id { get; set; }
}
您的功能可以返回:
private static MyModel Function()
{
if (ok)
{
return new MyModel
{
Success = true,
Id = UserId,
};
}
return new MyModel
{
Success = false,
};
}
答案 1 :(得分:1)
不,你做不到。
备选方案:
static object Function() {
if(ok)
return UserId; //string
else
return false; //bool
}
或者:
static object Function(out string userId) {
userId = null;
if (ok) {
userId = UserId;
return true;
}
return false;
}
答案 2 :(得分:0)
为什么要在这种情况下执行此操作?
只需从函数返回null。检查函数是否从您调用它的位置返回null。
如果您的方案不是您在问题中描述的方案,那么您可能需要查看泛型。
答案 3 :(得分:0)
没有。相反,请使用out
参数:
private bool TryGetUserId(out int userId) {
if (ok) {
userId = value;
return true;
}
return false;
}
这样称呼:
int userId = 0;
if (TryGetUserId(out userId)) {
// it worked.. userId contains the value
}
else {
// it didnt
}
答案 4 :(得分:0)
private static string Function()
{
if(ok)
return UserId; //string
else
return ""; //string
}
调用者只需要检查返回字符串是否为空。