在C#中,可以为空的原始类型(即bool?)只是它们对应Nullable<T>类型的别名,还是两者之间存在差异?
我的比较结果false符合预期
bool eq = typeof(int?).Equals(typeof(int));
Run Code Online (Sandbox Code Playgroud)
现在我有这个代码
List<object> items = new List<object>() { (int?)123 };
int result = items.OfType<int>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但这会返回123-无论如何该值是类型int?
怎么会这样?
更新: 似乎我不清楚我究竟要问的是什么(随着时间的推移,我也失去了一些问题),所以这里是一个tl; dr版本:
var test1 = a is byte & b; // compiles
var test2 = a is byte? & b; // does not compile
var test3 = a is byte? && b; // compiles
Run Code Online (Sandbox Code Playgroud)
这意味着 - 据我所知 - ?类型修饰符的优先级较低(因为它不是运算符,这可能不是最好的单词)而不是&运算符,但高于&&运算符.是这样吗?标准中描述了哪里?
原来的问题是:
在尝试从Jon Skeet的优秀博客文章"两个谜题的故事"中找出第二个谜题的答案时,我遇到了一个问题:
unsafe private void Test<T>(T a, bool b)
{
var test1 = a is byte? & b; // does not compile
var test2 = a is byte? …Run Code Online (Sandbox Code Playgroud) 我需要知道它们之间是否存在差异
DateTime? obj
Run Code Online (Sandbox Code Playgroud)
和
Nullable<DateTime> obj
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,他们的用例是什么?