今天在审查公关时我在课堂上看到了这个:
public bool ?Selected { get; set; } //question mark in front of property name
Run Code Online (Sandbox Code Playgroud)
我怀疑开发商的意思是这个
public bool? Selected { get; set; } //question mark at end of type
Run Code Online (Sandbox Code Playgroud)
我很惊讶这甚至遵守了所以我自己尝试了,发现这是合法的代码,它最终做同样的事情.
我的问题是:这两者之间是否存在任何微妙(或不那么微妙)的区别?
首先,我的 Visual Studio 2017 立即纠正了这个问题
public bool ?Selected { get; set; }
Run Code Online (Sandbox Code Playgroud)
对此
public bool? Selected { get; set; }
Run Code Online (Sandbox Code Playgroud)
那么,IL DASM来救援!可以看到生成的IL是一样的,就像@mjwills在评论中所说:
最后,您始终可以按+让 Visual Studio 重新格式化您的代码并正确管理空白和缩进。Ctrl+KCtrl+D
根据您关于更改为bool?的问题bool,这取决于:如果某些东西可以具有不确定的值或状态,就像复选框一样,您应该使用bool?; 否则bool就好了。