这是什么意思?运算符在类型声明后的C#中的平均值?

这是什么意思?运算符在类型声明后的C#中的平均值?,c#,nullable,C#,Nullable,我有一些带有以下数组声明的C#代码。注意颜色之后的单个? private Color?[,] scratch; 在我的调查中,我发现如果您有以下代码: int? a; 变量a未初始化。您将在何时何地使用此选项??只是语法上的糖分,它意味着该字段可以为空。它实际上是的缩写 在C#和Visual Basic中,通过使用 ? 值类型后的符号。例如,int?用C#还是整数? 在Visual Basic中,声明一个可以赋值的整数值类型 空 您不能将null分配给值类型,int作为值类型不能保存null

我有一些带有以下数组声明的C#代码。注意
颜色之后的单个

private Color?[,] scratch;
在我的调查中,我发现如果您有以下代码:

int? a;

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

只是语法上的糖分,它意味着该字段可以为空。它实际上是的缩写

在C#和Visual Basic中,通过使用 ? 值类型后的符号。例如,int?用C#还是整数? 在Visual Basic中,声明一个可以赋值的整数值类型 空

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

Color
的情况也是如此,因为它是一种结构(因此是值类型),不能保存空值,使用
Color?[,]
可以创建一个可空颜色数组

关于你的问题:

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

通过将
与变量一起使用不会使其初始化为
null
或任何其他值,它仍然需要初始化

int? a = null; 

int b = null;//error since b is not nullable

这意味着定义的类型可以为null。查看更多信息

使用nullables,您可以执行以下操作:

int? i = null;
当然,还要进行空检查:

if (i == null)
{
    // do stuff here ...
}

这意味着对象除了正常范围外,还可以有一个
null
-值

发件人:

可空类型是可空结构的实例。可为null的类型可以表示其基础值类型的正确值范围,再加上一个额外的null值。例如,可以为一个可为null的、发音为“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);
        }
    }
}

Color?
指的是
Color
,相当于
Nullable

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


这是一个可为空的结构

也是一个副本
是什么?运算符表示紧靠运算符前面的值类型的值可能为null

考虑它的一种方式,而不是一个正式的定义,是它是一个“例外”的值将如何“正常”分配一个值

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

.../Movies/Details?MovieName=TopGun
,或

但是如果我们想看一部电影的细节,而电影名称的价值没有定义,那该怎么办呢?您将在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);
}

如果你根据用户的输入进行一些数学计算,你会希望确保他们输入了一个数字,这样方程就不会使用默认值。你是如何在你不知道什么是
的旁边添加
nullable
标记的?我总是惊讶地发现,当问题很简单时,有很多重复的答案。可能重复的答案不能仅用“?”搜索问题。这就是为什么会有一个副本。那在声明中呢。客户端?.Close()?如果它仅仅是语法上的糖分,
可空
如何可互换?@dakab,在编译时它们会改变,例如,
int?
将变成
可空
.../Movies/Details?MovieName=DieHard
// 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);
}