【问题标题】:what is "int?" in C# types什么是“int”?在 C# 类型中
【发布时间】:2016-12-03 14:53:47
【问题描述】:

我在考试中看到了这个代码示例问题,它运行良好。

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);
        }
    }
}

谁能详细解释一下?

【问题讨论】:

标签: c# types int


【解决方案1】:

这是一个 C# nullable types

Nullable 类型表示可以分配 null 值的值类型变量。您不能基于引用类型创建可为空的类型。 (引用类型已经支持空值。)

这行int b = a; 会引发错误,因为您不能直接将int 类型分配给nullable int 类型。换句话说,int 数据类型不能接受 null 值。

【讨论】:

    【解决方案2】:

    int?Nullable<int> 的简写,表示可以将值null 分配给变量。

    在给出的示例中,变量b 的类型是int,它不能接受Nullable<int> 的值。

    请参阅This MSDN article 了解更多信息。

    【讨论】:

      【解决方案3】:

      如果你想转换一个int?要 int,您必须将其转换为:

      int? a = 9;
      int b = (int)a;
      

      或者:

      int b = a.Value;
      

      顺便说一句:这不会有任何问题:

      int a = 9;
      int? b = a;
      

      【讨论】:

        【解决方案4】:

        关于错误CS0266的一些信息:

        无法将类型“type1”隐式转换为“type2”。存在显式转换(您是否缺少演员表?) 当您的代码尝试在无法隐式转换但可以进行显式转换的两种类型之间进行转换时,会发生此错误。

        一个可为空的 int (int?) 不能简单地转换为一个 int。默认情况下,int 不能为 null,因此尝试将可以为 null 的内容转换为不能为 null 的内容会出现此错误。因为你试图做出这个假设,编译器告诉你,你不能。

        请参阅this 帖子,了解如何从可为空的 int 转换为 int。

        【讨论】:

          【解决方案5】:

          变量b 的类型为int,您正尝试将int? 分配给int。这将是错误的分配(如果a 为空,那么您不能将其分配给不可为空的对象b,因此编译器将不允许这样做):或者您可以使用:

          int? a = 9;
          int b = a == null ? 0 : 1;
          Console.Write("{0},{1}", a, b); 
          

          【讨论】:

            【解决方案6】:

            表示用 (int?) 声明的变量可以为空

            int i1=1; //ok
            int i2=null; //not ok
            
            int? i3=1; //ok
            int? i4=null; //ok
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-07-05
              • 2014-12-07
              • 2015-03-01
              • 1970-01-01
              • 1970-01-01
              • 2016-01-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多