为何仅含一个位置参数的record无法使用Positional Pattern?
单参数Record解构赋值的问题解析
为什么(var name) = p会报错?
C#的解构赋值语法有明确规则:当使用括号包裹变量进行解构时,必须将类型声明(比如var)放在括号外面,而非括号内部。(var name) = p这种写法不符合语法规范,编译器会将其误判为普通表达式赋值,而非解构操作。
需要明确的是:单参数Record确实会自动生成Deconstruct方法(签名为public void Deconstruct(out string Name)),问题出在语法写法上,而非Deconstruct方法是否存在。
如何让单参数Record的解构生效?
有两种可行写法:
写法1:正确的解构赋值语法
将var放在括号外侧:
public record Person(string Name); Person p = new("John Citizen"); var (name) = p; // 编译通过 Console.WriteLine(name);
写法2:直接调用Deconstruct方法
显式调用自动生成的Deconstruct方法:
public record Person(string Name); Person p = new("John Citizen"); p.Deconstruct(out var name); // 编译通过 Console.WriteLine(name);
关于你尝试的丢弃变量写法
你试的(var name) _ = p是错误语法,丢弃变量_必须放在解构的括号内部,且仅适用于多参数解构需要忽略某些值的场景,单参数解构完全不需要额外的丢弃变量。
内容的提问来源于stack exchange,提问作者user16095727
相关产品推荐
相关产品推荐

