C# “什么是”呢;int?“;在C类型中
我在一次考试中看到了这个代码示例问题,它非常有效C# “什么是”呢;int?“;在C类型中,c#,types,int,C#,Types,Int,我在一次考试中看到了这个代码示例问题,它非常有效 namespace Trials_1 { class Program { static void Main(string[] args) { int? a = 9; Console.Write("{0}", a); } } } 但是下面的代码抛出一个错误CS0266 namespace Trials_1 { class
namespace Trials_1
{
class Program
{
static void Main(string[] args)
{
int? a = 9;
Console.Write("{0}", a);
}
}
}
但是下面的代码抛出一个错误CS0266
namespace Trials_1
{
class Program
{
static void Main(string[] args)
{
int? a = 9;
int b = a;
Console.Write("{0},{1}", a, b);
}
}
}
谁能给我详细解释一下吗 有关错误的一些信息:
无法将类型“type1”隐式转换为“type2”。存在显式转换(是否缺少强制转换?)
当您的代码尝试在无法隐式转换但有显式转换可用的两种类型之间转换时,会发生此错误
可为null的int(int?
)不能简单地转换为int。默认情况下,int不能为null,因此尝试将可以为null的内容转换为不能为null的内容时,会出现此错误。因为你试图做出这个假设,编译器告诉你,你不能
请参阅关于如何将可为null的int转换为int的帖子。这是一个C#
可为null的类型表示可分配null值的值类型变量。不能基于引用类型创建可为空的类型。(引用类型已支持空值。)
这一行
intb=a
引发错误,因为无法将int
类型直接分配到可为null的int
类型。换句话说,int
数据类型不能接受null
值。int?
是null
的缩写,表示可以将null
值分配给变量
在给出的示例中,变量b
的类型是int
,它不能接受Nullable
的值
有关更多信息,请参阅。如果要转换int?要使用int,必须强制转换它:
int? a = 9;
int b = (int)a;
或:
B.t.w:这不会有任何问题:
int a = 9;
int? b = a;
变量
b
的类型为int
,您正试图将int?
赋值给int
。这将是错误的赋值(如果a
为null,则不能将其赋值给不可为null的对象b
,因此编译器将不允许这样做):或者,您可以使用:
int? a = 9;
int b = a == null ? 0 : 1;
Console.Write("{0},{1}", a, b);
表示用(int?)声明的变量可为空
int i1=1; //ok
int i2=null; //not ok
int? i3=1; //ok
int? i4=null; //ok
可能重复的
int i1=1; //ok
int i2=null; //not ok
int? i3=1; //ok
int? i4=null; //ok