gpt4 book ai didi

c# - 在 out 参数中使用未分配的局部变量

转载 作者:行者123 更新时间:2023-12-05 01:23:35 25 4
gpt4 key购买 nike

我遇到 C# 问题,给出“使用未分配的局部变量”编译错误。我错过了什么?

// returns generic result of a function with error message 
// why the function failed
public class Result
{
public bool isSuccess = true;
public string errorMessage = string.Empty;

public static implicit operator bool(Result r)
{
return r.isSuccess;
}

public static Result operator &(Result a, Result b)
{
return !a.isSuccess ? a : b;
}

public static Result operator |(Result a, Result b)
{
if (a.isSuccess)
{
return a;
}
if (b.isSuccess)
{
return b;
}
return new Result
{
isSuccess = false,
errorMessage = $"{a.errorMessage}\nOut{b.errorMessage}"
};
}

public static bool operator false(Result a)
{
return !a.isSuccess;
}

public static bool operator true(Result a)
{
return a.isSuccess;
}
}

static Result Func1(int nIn, out int nOut)
{
nOut = nIn + 1;
return new Result();
}

private static void Main(string[] args)
{
var resultA =
Func1(0, out var a1) &&
Func1(a1, out var a2); // compiles fine

var resultB =
Func1(0, out var b1) &&
Func1(b1, out var b2) &&
Func1(b2, out var b3); // Use of unassigned local variable 'b2'
}

最佳答案

我认为这可能是编译器中的一个错误——我个人希望b2肯定被分配到那里。明确分配的规范虽然很复杂,所以我现在不打算尝试以这种或那种方式证明它。规则可能不够“聪明”,无法计算出 (x && y) 为真的唯一方法是 xy 被评估,所以在 (x && y) && z 中,z 应该能够依赖 xy 已被评估。

但是,它很容易变通,只需多加一对括号即可:

var resultB =
Func1(0, out var b1) &&
(Func1(b1, out var b2) && Func1(b2, out var b3));

关于c# - 在 out 参数中使用未分配的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72246247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com