C# C:为什么要从Int显式转换为Int?

C# C:为什么要从Int显式转换为Int?,c#,.net,C#,.net,上面的代码段很好,将int直接转换为int?,不需要显式转换 但是 为什么我们需要在这里进行强制转换,尽管第一个例子中使用了相同的方法?原因是三元运算符必须在两个分支中使用相同的类型。所以true和false返回值必须是int?或int。不能使用两种不同的类型。因为在第一种情况下,您正在将基元类型移动到引用类型。在第二种情况下,你正在做相反的事情。无法将引用类型直接转换为请求的基元值。此处不涉及引用类型。null没有类型,是可为null的值类型的良好默认值,不涉及引用类型。这是不正确的。这两个分

上面的代码段很好,将int直接转换为int?,不需要显式转换

但是


为什么我们需要在这里进行强制转换,尽管第一个例子中使用了相同的方法?

原因是三元运算符必须在两个分支中使用相同的类型。所以true和false返回值必须是int?或int。不能使用两种不同的类型。

因为在第一种情况下,您正在将基元类型移动到引用类型。在第二种情况下,你正在做相反的事情。无法将引用类型直接转换为请求的基元值。此处不涉及引用类型。null没有类型,是可为null的值类型的良好默认值,不涉及引用类型。这是不正确的。这两个分支不必具有相同的类型,但在它们不具有相同类型的情况下,必须在任一方向上都有显式转换。null没有特定的类型,因此没有此类转换可用。这就是编译器拒绝编译它的原因。可以用吗?intVal:nullableIntVal没有相同的类型。感谢您提供更具体的答案!
  int a = 1;
  int? b = a; 
  Console.WriteLine(b);
List<int> temp = new List<int>{1};      
int? valueVariable = temp!=null && temp.Count>0 ? temp[0] : null ;
Console.WriteLine(valueVariable);
// Working Snippet with int? casting
int? valueVariable = temp!=null && temp.Count > 0 ? (int?) temp[0] : null ;