1

我有一个功能,如下所示:

private static *bool* Function()
{

if(ok)
return UserId; //string
else
return false; //bool

}

有什么办法吗?在stackoverflow中有一些这样的问题,但我无法理解。

4

5 回答 5

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,
    };
}
于 2013-08-02T08:46:25.600 回答
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;
}
于 2013-08-02T08:47:49.080 回答
0
private static string Function()
{

if(ok)
return UserId; //string
else
return ""; //string

}

调用者只需要检查返回字符串是否为空。

于 2013-08-02T08:53:23.747 回答
0

为什么要在这种情况下执行此操作?

只需从函数返回 null 。检查函数是否从您调用它的位置返回 null。

如果您的场景与您在问题中描述的不同,那么您可能需要查看泛型。

于 2013-08-02T08:47:28.033 回答
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 
}
于 2013-08-02T08:51:27.187 回答