10

我有一些带有以下数组声明的 C# 代码。注意?后面的单Color

private Color?[,] scratch;

在我的调查中,我发现如果您有以下代码:

int? a;

变量a未初始化。您将在何时何地使用它?

4

7 回答 7

18

?只是语法糖,这意味着该字段是可空的。它实际上是Nullable<T>.

在 C# 和 Visual Basic 中,您可以使用 ? 将值类型标记为可为空的。值类型后的符号。例如,int? 用 C# 还是整数?在 Visual Basic 中声明了一个可以分配为 null 的整数值类型。

您不能分配null给值类型,int作为值类型不能保存null值,int?另一方面可以存储空值。

情况也是如此Color,因为它是一个结构(因此是值类型)并且它不能保存空值,Color?[,]因此您正在制作一个可为空的颜色数组。

对于您的问题:

变量“a”未初始化。您将在何时何地使用它?

通过使用?with 变量不会使其初始化为null或任何其他值,它仍然必须被初始化。

int? a = null; 

int b = null;//error since b is not nullable
于 2013-05-27T13:06:27.410 回答
4

这意味着定义的类型可以为空。查看此链接了解更多信息。

使用可为空值,您可以执行以下操作:

int? i = null;

当然还要做空检查:

if (i == null)
{
    // do stuff here ...
}
于 2013-05-27T13:06:33.787 回答
0

它是一个可以为空的结构

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

也是重复的 https://stackoverflow.com/questions/5407552/what-does-question-mark-after-a-type-name-mean-in-c

于 2013-05-27T13:08:50.353 回答
0

这意味着对象可以null在其正常范围之外具有 - 值。

来自MSDN

Nullable 类型是 Nullable 结构的实例。可空类型可以表示其基础值类型的正确值范围,以及额外的空值。例如,一个 Nullable,发音为“Nullable of Int32”,可以分配从 -2147483648 到 2147483647 的任何值,也可以分配 null 值。
...

例子

class NullableExample
{
    static void Main()
    {
        int? num = null;

        // Is the HasValue property true? 
        if (num.HasValue)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero 
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false 
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}
于 2013-05-27T13:07:39.840 回答
0

Color?指 a并且等价于 。Nullable ColorNullable<Color>

Color c = null;//ERROR Color is a struct, cannot be null!
Color? c = null;//OK

可空类型

于 2013-05-27T13:07:56.387 回答
0

语法 T? 是 System.Nullable 的简写,其中 T 是值类型。这两种形式可以互换。

http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx

于 2013-05-27T13:08:00.743 回答
0

这 ?operator 表示紧接在该运算符之前的值类型可能具有 null 值。

考虑它的一种方法,绝不是正式的定义,是它是如何“通常”为值分配值的“例外”。

运算符的一个经典用例是 Web 应用程序中的简单控制器。假设我们有一个存储电影列表的典型数据库。我们可以通过在 URL 中添加以下内容来访问这些电影的详细信息:

.../Movies/Details?MovieName=TopGun

, 或者,

.../Movies/Details?MovieName=DieHard

但是,如果我们想查看未定义 MovieName 值的电影的详细信息怎么办?您将在 HTML 页面上显示什么?好吧,这个控制器会通知我们一个错误的请求:

看一下这个:

// GET: Movies/Details/5
public ActionResult Details(int? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}
于 2021-04-29T20:57:31.187 回答