我愿意:
(bool success, string name1, string name2) MyFunc() {
if (DateTime.Now.Year > 2020) return (false, "", ""); // error
return (true, "some value", "some value");
}
我的编码风格是先尝试处理错误,我尝试过:
void f() {
if (MyFunc() is (false, var name1, var name2)) return;
Console.WriteLine(name1);
}
我得到
Error CS0165 Use of unassigned local variable 'name1'
在
Console.WriteLine
这有效:
void f() {
if (!(MyFunc() is (true, var name1, var name2)))) return;
Console.WriteLine(name1);
}
我试图理解为什么会这样?由于调用了 MyFunc(),结果元组可用,为什么编译器不分配它并让我使用它?
这将是一种非常有用的返回状态+结果的方式,请求该功能是否有意义?
最佳答案
name1
和 name2
只有返回值 MyFunc()
才会被赋值匹配模式。并且,在这种情况下,该方法返回。
所以,Console.WriteLine(name1);
只有在 MyFunc()
时才会执行与模式不符。并且,在这种情况下,name1
和 name2
不会被分配。
这将起作用:
void f()
{
(var error, var name1, var name2) = MyFunc();
if (error) return;
Console.WriteLine(name1);
}
is
type pattern expression when
clauses in case
expressions 关于c# - 模式匹配和未分配的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59763042/