我有一个功能,如下所示:
private static *bool* Function()
{
if(ok)
return UserId; //string
else
return false; //bool
}
有什么办法吗?在stackoverflow中有一些这样的问题,但我无法理解。
似乎 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,
};
}
不,你不能那样做。
备择方案:
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;
}
private static string Function()
{
if(ok)
return UserId; //string
else
return ""; //string
}
调用者只需要检查返回字符串是否为空。
为什么要在这种情况下执行此操作?
只需从函数返回 null 。检查函数是否从您调用它的位置返回 null。
如果您的场景与您在问题中描述的不同,那么您可能需要查看泛型。
不,而是使用一个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
}