c#中动态返回类型的函数

时间:2013-08-02 08:43:52

标签: c# c#-4.0

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

private static *bool* Function()
{

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

}

有没有办法做到这一点?在stackoverflow中有一些像这样的问题,但我无法理解。

5 个答案:

答案 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

}

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