【发布时间】:2011-02-11 01:30:24
【问题描述】:
通常,问号的主要用途是用于条件句,x ? "yes" : "no"。
但我看到了它的另一种用途,但找不到对 ? 运算符的这种用法的解释。
public int? myProperty
{
get;
set;
}
【问题讨论】:
通常,问号的主要用途是用于条件句,x ? "yes" : "no"。
但我看到了它的另一种用途,但找不到对 ? 运算符的这种用法的解释。
public int? myProperty
{
get;
set;
}
【问题讨论】:
表示用 (int?) 声明的变量可以为空
int i1=1; //ok
int i2=null; //not ok
int? i3=1; //ok
int? i4=null; //ok
【讨论】:
int? 是Nullable<int> 的简写。这两种形式可以互换。
Nullable<T> 是一个运算符,您可以将其与值类型 T 一起使用以使其接受 null。
如果你不知道:value types 是接受 int、bool、char 等值的类型......
他们不能接受对值的引用:如果你给他们分配null,他们会产生编译时错误,而不是reference types,后者显然可以接受。
你为什么需要那个? 因为有时您的值类型变量可能会接收到由无法正常工作的事物返回的空引用,例如从数据库返回的缺失或未定义变量。
我建议你阅读Microsoft Documentation,因为它很好地涵盖了这个主题。
【讨论】:
它是Nullable<int> 的简写。 Nullable<T> 用于允许将值类型设置为null。值类型通常为cannot be null。
【讨论】:
value types 不能为空。如果您声明一个 int 或一个 bool(它们是值类型)而没有专门分配一个值,它们仍然会有值(分别为 0 和 false),即。它们不会为空。另一方面,未分配的reference types,例如object 或MyClass,将为null。您可能想了解值类型和引用类型之间的区别。
表示有问题的值类型是nullable type
Nullable 类型是 System.Nullable 结构的实例。一种 可空类型可以表示其正确的值范围 基础值类型,加上一个额外的空值。例如,一个
Nullable<Int32>,发音为“Nullable of Int32”,可以分配任何 值从 -2147483648 到 2147483647,或者可以分配为 null 价值。可以为Nullable<bool>分配值 true、false 或 空值。将 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 类。
在
x ? "yes" : "no"
? 声明了一个 if 语句。这里:x代表布尔条件; : 之前的部分是 then 语句,之后的部分是 else 语句。
例如,
int?
?声明了一个可以为空的类型,意味着它之前的类型可能有一个空值。
【讨论】:
return value ? value : "isNull"; 告诉我 string value 不能转换为布尔值。
为了补充上面的答案,这里是一个代码示例
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 转换为“测试”,因为它是不可为空的 值类型
请注意,NullableTest 没有编译错误。 (注意 t2 声明中的 ?)
【讨论】:
实际用法:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
【讨论】:
它声明该类型可以为空。
【讨论】: