Razor页面声明可空变量遇CS1061错误:Task无data定义如何解决
报错根本原因
核心是C#运算符优先级问题:成员访问运算符.的优先级高于await关键字。你原始代码的执行顺序是先对GetPossibleDuplicateRecord()返回的Task类型对象取.data属性,而Task本身没有data定义,因此触发CS1061编译错误,和_OldRecord是否为null无关。
之前修改无效的原因
- 给
_OldRecord添加?可空标识:该修改针对的是运行时变量空引用风险,当前属于编译期类型不匹配错误,二者完全不相关,因此无效果。 - 未加括号直接将
.data放在await调用后:只要没有括号包裹await段,执行顺序依然是先访问Task的data属性,所以还是会触发相同报错。
正确修改方案
方案1:添加括号明确执行优先级
用括号强制先执行await逻辑,拿到异步方法返回的实际业务对象后,再访问其data属性:
_OldRecord = (await GetPossibleDuplicateRecord(Convert.ToInt64(OldId))).data;
方案2:拆分两行写法(可读性更高,避免优先级坑)
拆分异步等待和属性访问两个步骤,从写法上规避优先级错误:
// 先await拿到异步方法的返回结果 var duplicateRecordResult = await GetPossibleDuplicateRecord(Convert.ToInt64(OldId)); // 再访问结果的data属性完成赋值 _OldRecord = duplicateRecordResult.data;
内容的提问来源于stack exchange,提问作者user8127184
相关产品推荐
相关产品推荐

