我是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的值类型)
答案 0 :(得分:1)
这是因为代码的实际评估方式。作业的右侧将首先评估:
val as int;
然后将其结果分配给int? a
。如果val
可以是int
的值,则可以通过如下更改代码来解决此问题:
int? a = val as int?;
但是,由于val
是string
,因此无法使用。相反,您应该使用int.TryParse
:
int? a = null;
if (int.TryParse(val, out int tmp)
{
a = tmp;
}
如果解析成功, int.TryParse
将返回true
,否则返回false
。这优于int.Parse
,因为如果无法解析该值,则会抛出异常。
我试图使它的性能与您想要的一样(因此是临时任务)。