可为空的类型不能使用“ is”关键字

时间:2019-06-11 02:11:43

标签: c# .net

我是C#和.net的新手,只是有关nullable的问题。 下面是我的代码:

Console.Write("Enter Integer: ");
string val = Console.ReadLine();
int? a = val as int;   //compile error
Console.WriteLine("Your input: {0}", a);

我了解“ as”仅可用于引用类型或可为空的事实,因为int是结构/值类型,因此我添加了?使其成为可为空的类型,那么为什么它仍会编译错误?

  

as运算符必须与引用类型或可为null的类型一起使用(“ int”为不可为null的值类型)

1 个答案:

答案 0 :(得分:1)

这是因为代码的实际评估方式。作业的右侧将首先评估:

val as int;

然后将其结果分配给int? a。如果val可以是int的值,则可以通过如下更改代码来解决此问题:

int? a = val as int?;

但是,由于valstring,因此无法使用。相反,您应该使用int.TryParse

int? a = null;
if (int.TryParse(val, out int tmp)
{
    a = tmp;
}
如果解析成功,

int.TryParse将返回true,否则返回false。这优于int.Parse,因为如果无法解析该值,则会抛出异常。

我试图使它的性能与您想要的一样(因此是临时任务)。