C#代码中的问号代表什么意思?

13

我看到过像以下这样的无关代码:

 Console.Write(myObject?.ToString());
 return isTrue ? "Valid" : "Lie";
 return myObject ?? yourObject;
 int? universalAnswer = 42;

似乎C#8+中有更多的内容,例如

 public static Delegate? Combine(params Delegate?[]? delegates)...
 string? value = "bob";

问号的所有用法是相关的还是不同的?它们各自代表什么意思?


@DavidG 很好的观点 - 我没有注意到自我回答界面是否有 CW 选项 - 已更改为 CW。 - Alexei Levenkov
很久以前,有一个选项可以将问题/答案标记为社区维基。就像对于NullReferenceException这个主题。现在找不到这个选项了... - Sergey Berezovskiy
我想知道帖子是否应该复制到这个帖子中? - DavidG
1
@SergeyBerezovskiy 只有回答可以被标记为 CW,且只能由回答者或管理员进行。 问题不能由任何人完成,只能由管理员完成 - DavidG
@DavidG 我在 Meta 上询问了这个问题 - https://meta.stackoverflow.com/questions/346099/summary-self-answer-close-as-multiple-dup-or-links。 - Alexei Levenkov
显示剩余3条评论
1个回答

45

问题标记在C#中根据上下文有不同的含义。

Null-条件运算符MSDN, C#成员访问中的问号是什么意思?

Console.Write(myObject?.Items?[0].ToString());

条件运算符/三目运算符 (MSDN, 使用条件 ?: (ternary) 运算符的好处)

return isTrue ? "Valid" : "Lie";

空值合并运算符 (MSDN, C#中两个问号连在一起是什么意思?)

return myObject ?? yourObject;

可空值类型 (MSDN, 什么是在类型后加问号的目的(例如:int?myVariable)?)

int? universalAnswer = 42;

C# 8增加了可空引用类型,提供了更多的选项来添加问号(它还提供了一个新的放置解释符号的位置——null!是一个null-forgiving operator)。可空字符串(请记住,string是像值类型一样行为的引用类型):
string? value = "bob"; 

可空的引用对象数组 - C#中的?[]?语法是什么?

public static Delegate? Combine(Delegate?[]? delegates)

我可以问一下,为什么有人会将字符串设置为“Nullable”,如果它默认可以包含“null”?这是因为“Nullable<T>”的优点/特性,例如“.HasValue”吗? - Artfaith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接