这个关键字和双问号(??)让我很困惑

时间:2013-01-28 10:46:18

标签: c#

  

可能重复:
  What do two question marks together mean in C#?

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

例如

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

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

对于条件 if 和返回值,即

return a == 0 ? a:b;

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

6 个答案:

答案 0 :(得分:3)

?? - {。3}} .Net 2.0

方法中的

this - >指定现有类型的null coalescing operator,随C#3.0引入

答案 1 :(得分:1)

指的是扩展方法

关于扩展方法,您可以在此link

找到详细信息
  

?? 运算符称为null-coalescing运算符,用于   为可空值类型和引用定义默认值   类型。如果它不为null,则返回左侧操作数;除此以外   它返回正确的操作数。

答案 2 :(得分:0)

这是一个无效的操作员,请参阅MSDN explanation

答案 3 :(得分:0)

GetHtmlContent(this HttpRequest myRequest)

嗯,这可以推断它是Extension method,但你的代码是编译的,因为你的课程不是静态的

  

当方法的第一个参数包含this修饰符时,即   方法被认为是一种扩展方法。扩展方法只能   在非泛型的非嵌套静态类中声明。首先   扩展方法的参数除了可以没有修饰符   这个,参数类型不能是指针类型。

此外,??是一个空合并运算符

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

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

答案 4 :(得分:0)

本资格赛

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

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

?或Null-Coalescing运算符

??或Null-Coalescing运算符是一个语法糖:

var2 = var1 == null ? something : var1;

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

var2 = var1 ?? something;

答案 5 :(得分:0)

是的,它是新功能。

在第一个方法参数之前

这个意味着该方法是一个扩展方法。我很确定该函数需要是静态的才能生效。

因此,要使用该方法,您可以编写

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

它会以请求作为参数调用GetHtmlContent。

??是null-coalescing运算符,用于简化对null的检查。

而不是

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

这意味着如果字符串s为null,则返回此值,但如果它不为null,则返回s的值,您只需编写:

返回s ?? “默认”;

如果它不为null,则返回s,如果s为null,则返回default。