0

可能重复:
在 C# 中,两个问号一起意味着什么?

这是添加到 C# 3.x 的新功能吗?

例如

public class HttpRequests
{
    public string GetHtmlContent(this HttpRequest myRequest)
    {            
       //do something
       return retStr ?? (retStr=new GetHtmlStr(urlStr));
    }
}

这个和?? _ 对我来说很奇怪,因为我多年来没有更新我对 C# 的了解。我知道 C# 2.x。

对于条件if和返回值,即

return a == 0 ? a:b;

是的,我能理解这是什么。有人可以解释一下吗?

4

6 回答 6

3

??- .Net 2.0 引入的空合并运算符

thisin method -> 指定现有类型的扩展方法,由 C# 3.0 引入

于 2013-01-28T10:51:01.190 回答
1

this指的是扩展方法

关于扩展方法,您可以在此链接中找到全面的详细信息


?? _ 运算符称为空值合并运算符,用于为可空值类型和引用类型定义默认值。如果它不为空,则返回左操作数;否则返回正确的操作数。

于 2013-01-28T10:49:20.933 回答
0
GetHtmlContent(this HttpRequest myRequest)

好吧,这推断它是一个Extension method但是你的代码是否编译,因为你的类不是静态的

当方法的第一个参数包含 this 修饰符时,该方法称为扩展方法。扩展方法只能在非泛型、非嵌套的静态类中声明。扩展方法的第一个参数不能有除此以外的修饰符,参数类型不能是指针类型。

也是??一个空合并运算符

string something = maybenull ?? "I cannot be null";

因此,当maybenullobject 为 null 时,您将获得分配给您的字符串的另一个字符串。

于 2013-01-28T10:52:58.423 回答
0

本次预选赛

this在静态类中的静态方法的第一个参数之前使用限定符时,该方法称为“扩展方法”。基本上你是在对编译器说:“嘿,我想将此方法添加到现有类而不修改它”。

LINQ 大量使用它们(有关详细信息,请参阅Enumerable Class )。

?? 或 Null-Coalescing 运算符

?? 或 Null-Coalescing Operator 是语法糖:

var2 = var1 == null ? something : var1;

事实上,你可以用一行简单的代码替换上面的操作:

var2 = var1 ?? something;
于 2013-01-28T10:54:35.020 回答
0

是的,这是新功能。

this在第一个方法参数之前表示该方法是扩展方法。我很确定该函数必须是静态的才能有效。

所以要使用这种方法,你可以写

HttpRequest request;
// assign request
request.GetHtmlContent();

它会以 request 作为参数调用 GetHtmlContent。

这 ??是 null 合并运算符,用于简化对 null 的检查。

代替

string s;
// ... s something something
// return s == null ? s = "default" : s;

这意味着如果字符串s为null,则返回这个值,但如果它不为null,则返回s的值,你可以简单地写:

返回 ?? “默认”;

如果它不为空,则返回 s,如果 s 为空,则返回默认值。

于 2013-01-28T10:54:35.947 回答
0

这是一个null-coalising算子,见MSDN解释

于 2013-01-28T10:50:28.403 回答