值类型(例如:int?)后面加问号的目的是什么?myVariable) ?

通常,问号主要用于条件句x ? "yes" : "no"

但我看到过它的另一种用法,但找不到?操作符这种用法的解释。

public int? myProperty
{
get;
set;
}
326046 次浏览

它声明该类型是可空的。

它是Nullable<int>的简写。Nullable<T>用于允许将值类型设置为null。值类型通常是不能为空

这意味着所讨论的值类型是可空类型

可空类型是系统实例。Nullable结构。一个 可空类型可以表示其值的正确范围 基础值类型,加上一个额外的空值。例如, Nullable<Int32>,发音为“Nullable of Int32”,可以赋值为任何 值从-2147483648到2147483647,或者可以将其赋值为null 价值。Nullable<bool>可以被赋值为true、false或 null。将null分配给数字类型和布尔类型的能力是 在处理数据库和其他数据时尤其有用 包含不能赋值的元素的类型。为 例如,数据库中的布尔字段可以存储值true或

.

.

.
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);
}
}
}

x ? "yes" : "no"

?声明了一个如果句子。这里:x表示布尔条件;之前的部分是然后句子,后面的部分是其他的句子。

例如,

int?

?声明了一个可空类型,意味着它前面的类型可能有一个空值。

实际的用法:

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}


return someFunctionThatHandlesIntAndReturnsString(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转换为'Test',因为它是非空的 值类型< / p >

注意NullableTest没有编译错误。(注意?在t2的声明中)

int?Nullable<int>的缩写。这两种形式是可以互换的。

Nullable<T>是一个操作符,可以与值类型T一起使用,使它接受null

以防你不知道:值类型是接受值为intboolchar等的类型…

它们不能接受对值的引用:如果给它们分配null,而不是引用类型,它们会生成一个编译时错误,而引用类型显然可以接受它。

你为什么需要这个? 因为有时候你的值类型变量可能会收到一些工作不太好的东西返回的空引用,比如从数据库返回的一个缺失或未定义的变量

我建议你阅读微软文档,因为它很好地涵盖了这个主题。

表示用(int?)声明的变量是可空的

int i1=1; //ok
int i2=null; //not ok


int? i3=1; //ok
int? i4=null; //ok

再加上其他答案:

从c# 8.0开始,Nullable<>?并不总是可以互换的。Nullable<>只适用于值类型,而?适用于引用和值类型

这些可以在文档中看到

可空引用类型使用与nullable相同的语法进行标记 值类型:一个?被附加到变量的类型。"

和# EYZ0

# EYZ0