通常问号的主要用途是条件运算符,例如x ? "yes" : "no"
。
但我看到过另一种使用方式,但找不到关于这种使用问号运算符?
的解释,例如。
public int? myProperty
{
get;
set;
}
通常问号的主要用途是条件运算符,例如x ? "yes" : "no"
。
但我看到过另一种使用方式,但找不到关于这种使用问号运算符?
的解释,例如。
public int? myProperty
{
get;
set;
}
这意味着问题中的值类型是 可空类型
可空类型是 System.Nullable 结构体的实例。可空类型可以表示其基础值类型的正确值范围,以及一个额外的 null 值。例如,
Nullable<Int32>
,发音为“Int32 的可空类型”,可以被赋予从 -2147483648 到 2147483647 的任何值,或者它可以被赋予 null 值。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); } } }
int
类型和相应的Integer
类。 - Sean这是一个Nullable<int>
的简写。 Nullable<T>
用于允许将值类型设置为null
。 值类型通常不能为null。
值类型
不能为null。如果您声明一个int或bool(它们是值类型),而没有明确赋值,则它们仍然会有值(分别为0和false),即它们不会为null。相反,未分配的引用类型
,例如object或MyClass,将为null。您可能想了解一下值类型和引用类型之间的区别。 - Klaus Byskov PedersenIn
x ? "yes" : "no"
?声明一个if语句。这里:x表示布尔条件;在:之前的部分是then语句,在之后的部分是else语句。例如,
int?
?声明了一个可空类型,表示它之前的类型可能有一个空值。
return value ? value : "isNull";
告诉我 string value
无法转换为布尔类型。 - C4d实际应用:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
int?
是Nullable<int>
的简写,两种形式可以互换使用。
Nullable<T>
是一个操作符,你可以用它来使值类型T
接受null
。
如果你不知道,值类型是指接受像int
、bool
、char
等值作为输入的类型...
它们不能接受值的引用:如果你给它们赋值null
,会在编译时产生错误,而引用类型则可以接受它。
为什么需要这个呢? 因为有时候你的值类型变量可能会接收到一些不太好的返回值,比如从数据库返回的缺失或未定义的变量。
我建议你阅读Microsoft文档,因为它很好地涵盖了这个主题。
public Item? item { get; set; };
和public Nullable<Item> item { get; set; };
,其中Item是一个简单的类。 - Mattias Martens使用(int?)声明的变量表示它是可空的。
int i1=1; //ok
int i2=null; //not ok
int? i3=1; //ok
int? i4=null; //ok
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声明中的问号?)