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