相关疑难解决方法(0)

Nullable类型问题?:条件运算符

有人可以解释为什么这在C#.NET 2.0中有效:

    Nullable<DateTime> foo;
    if (true)
        foo = null;
    else
        foo = new DateTime(0);
Run Code Online (Sandbox Code Playgroud)

......但这不是:

    Nullable<DateTime> foo;
    foo = true ? null : new DateTime(0);
Run Code Online (Sandbox Code Playgroud)

后一种形式给我一个编译错误"无法确定条件表达式的类型,因为'<null>'和'System.DateTime'之间没有隐式转换."

并不是说我不能使用前者,但第二种风格与我的其余代码更加一致.

c# generics nullable conditional-operator

154
推荐指数
3
解决办法
6万
查看次数

为什么三元运算符不会根据要查找的值找到类型?

一个问题在这里提出了一个问题对我来说:

例如x = y ? a : b,c#中的三元运算使用任一类型ab确定三元表达式的类型.为什么不使用这种类型x?在任何给定的情况下,是否有可以使用的预期返回类型?

编辑:为了清楚起见,当我说

为什么不使用这种类型x

我想我的意思是

为什么不首先尝试使用这种类型x

正如文件所述:

  • 如果X和Y是相同的类型,那么这是条件表达式的类型.
  • 否则,如果从X到Y存在隐式转换(第6.1节),而不是从Y到X,则Y是条件表达式的类型.
  • 否则,如果从Y到X存在隐式转换(第6.1节),而不是从X到Y,则X是条件表达式的类型.
  • 否则,无法确定表达式类型,并发生编译时错误.

这个过程可以从以下开始:

  • 如果分辨率类型是明确的,则它是条件表达式的类型.

c#

8
推荐指数
1
解决办法
126
查看次数

标签 统计

c# ×2

conditional-operator ×1

generics ×1

nullable ×1