通常,问号的主要用途是针对条件x ? "yes" : "no"
x ? "yes" : "no"
。
但是我看到了它的另一种用法,但是找不到这种用法的解释?
例如运算符。
public int? myProperty
{
get;
set;
}
#1楼
它声明类型为可为空。
#2楼
它是Nullable<int>
的简写。 Nullable<T>
用于允许将值类型设置为null
。 值类型通常不能为null 。
#3楼
可空类型是System.Nullable结构的实例。 可空类型可以表示其基础值类型的正确值范围,以及附加的空值。 例如,可以为
Nullable<Int32>
(发音为“ Int32的Nullable”)分配从-2147483648到2147483647之间的任何值,也可以为其分配空值。 可以为Nullable<bool>
分配值true,false或null。 在处理包含可能未分配值的元素的数据库和其他数据类型时,为数字和布尔类型分配null的功能特别有用。 例如,数据库中的布尔值字段可以存储值true或false,也可以未定义。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); } } }
#4楼
可空类型是System.Nullable结构的实例。 可为空的类型可以表示其基础值类型的正常值范围,以及一个附加的null值 。 例如,可以为[
Nullable<Int32>
](发音为“ Int32的Nullable”)分配从-2147483648到2147483647之间的任何值,也可以为其分配空值。 可以为[Nullable<bool>
]分配值true或false或null。 当处理包含可能未分配值的元素的数据库和其他数据类型时,为数字和布尔类型分配null的功能特别有用。 例如,数据库中的布尔值字段可以存储值true或false,也可以未定义。
#5楼
在
x ? "yes" : "no"
? 声明一个if语句。 此处: x表示布尔条件; 之前的部分:是当时的句子,后一部分是别的句子。
例如,
int?
? 声明一个可为null的类型,并表示它之前的类型可能具有null值。
#6楼
实际用法:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
#7楼
为了补充上面的答案,这是一个代码示例
struct Test
{
int something;
}
struct NullableTest
{
int something;
}
class Example
{
public void Demo()
{
Test t = new Test();
t = null;
NullableTest? t2 = new NullableTest();
t2 = null;
}
}
这将导致编译错误:
错误12无法将null转换为“ Test”,因为它是不可为空的值类型
请注意,NullableTest没有编译错误。 (注意t2声明中的?)
#8楼
int?
是Nullable<int>
简写。 两种形式可以互换。
Nullable<T>
是可与值类型T
配合使用的运算符,以使其接受null
。
如果您不知道它: 值类型是接受诸如int
, bool
, char
等值的类型 。
它们不能接受对值的引用:如果将它们分配为null
,而不是可以接受的引用类型 ,则它们将生成编译时错误。
你为什么需要那个? 因为有时您的值类型变量可能会接收到某些操作不正常的返回的空引用,例如从数据库返回的丢失或未定义的变量。
我建议您阅读Microsoft文档,因为它很好地涵盖了该主题。