这是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;
答案 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运算符是一个语法糖:
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。