我有一些C#代码,其中包括以下数组声明。请注意,在Color
后面有一个单独的?
。
private Color?[,] scratch;
在我的调查中,我发现如果您的代码类似于:
int? a;
变量a
未初始化。什么时候和在哪里会使用这个变量??
只是语法糖,它表示该字段是可空的。实际上,它是Nullable<T>
的简写。
在C#和Visual Basic中,您可以使用值类型后面的?符号将值类型标记为可空。例如,在C#中,int?或在Visual Basic中,Integer?声明了一个整数值类型,可以分配null。
您无法将null
赋给值类型,因为int
是值类型,无法保存null
值,而int?
则可以存储null值。
对于Color
也是同样的情况,因为它是一个结构体(因此是值类型),无法保存null值,使用Color?[,]
可以创建一个可空的颜色数组。
针对您的问题:
使用变量'a'未初始化。何时何地会使用它?
?
与变量一起并不会使其初始化为null
或任何其他值,它仍然必须进行初始化。int? a = null;
int b = null;//error since b is not nullable
?
和 Nullable<T>
如何可以互换使用? - dakabint?
将变成 Nullable<int>
。 - Habibint? i = null;
当然,要进行null检查:
if (i == null)
{
// do stuff here ...
}
这意味着对象除了其正常范围外,还可以具有null
值。
来自MSDN:
可空类型是Nullable结构的实例。可空类型可以表示其基础值类型的正确值范围,以及额外的null值。例如,一个Nullable,发音为“Int32的Nullable”,可以被分配从-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);
}
}
}
http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx
问号运算符表示紧接在运算符之前的值类型可能具有空值。
一种思考方式,绝不是正式定义,它是对值通常如何被赋值的“异常”的解释。
运算符的一个经典用例是在 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);
}
?
的含义的情况下添加了nullable
标签的? - Soner Gönül