【发布时间】:2017-11-15 07:28:58
【问题描述】:
在填写有关 Xamarin Studio 的错误案例之前,我想征求您的意见
public class Class1
{
public int AProp { get; set; }
}
考虑这个简单的场景
Class1 c;
var aProp = c?.AProp;
不应该将 aProp 推断为 int? 实例,因为它在 Visual Studio 2015+ 上的 c#-6.0 中?因为实际上不是,所以推断为普通的int。
Xamarin Studio 没有抱怨运算符,但它没有将 aProp 识别为可空类型,因此抱怨 .HasValue 属性评估;不仅是 Intellisense,而且在编译时更糟糕
是我遗漏了什么还是只是我的 IDE?
编辑:
Acutally 我刚刚发现我可以在空合并检查中使用它,即使推断的类型实际上是 int!
什么混合!呵呵
【问题讨论】:
-
你能显示你使用
HasValue的代码吗? -
只是为了好奇,是类型是什么?
-
@rory.ap 最简单的你可以想象...只需将类放在命名空间中,在其中添加任何方法,调用第二两行并添加类似
if (aProp.HasValue) { }的内容。结果:编译错误'int' does not contain a definition for 'HasValue' [...] -
嗯...没关系。解释一下:你说它应该是
int?,但它不是。那么,那是什么?我假设它被解释为int。我没有看到你明确提到这一点,(尽管你在评论中提到了)。 -
Xamarin Studio 6.3 版构建 863 和 VS2017 都将 c?.AProp 推断为 int?
标签: c# nullable xamarin-studio c#-6.0 null-propagation-operator