The this keyword and double question mark (??) confuse me
Possible Duplicate:
What do two question marks together mean in C#?
这是添加到c 3.x的新功能吗?
例如
1 2 3 4 5 6 7 8 | public class HttpRequests { public string GetHtmlContent(this HttpRequest myRequest) { //do something return retStr ?? (retStr=new GetHtmlStr(urlStr)); } } |
这个和??对我来说很奇怪,因为我已经好几年没有更新我对C的了解了。我知道C 2。
对于条件if和返回值,即
是的,我能理解这是什么。有人能解释一下吗?
方法->中的
这是指扩展方法
关于扩展方法,您可以在此链接中找到一个全面的详细信息
The ?? operator is called the null-coalescing operator and is used to
define a default value for a nullable value types as well as reference
types. It returns the left-hand operand if it is not null; otherwise
it returns the right operand.
是的,这是新功能。
这在第一个方法参数之前意味着该方法是一个扩展方法。我很确定该函数必须是静态的才能有效。
所以要使用这个方法,你可以写
1 2 3 | HttpRequest request; // assign request request.GetHtmlContent(); |
并以请求为参数调用gethtmlcontent。
这个??是空合并运算符,用于简化对空的检查。
而不是
1 2 3 | string s; // ... s something something // return s == null ? s ="default" : s; |
这意味着,如果字符串s为空,则返回该值,但如果它不为空,则返回s的值,您只需编写:
返回S?"默认";
如果不为空则返回s,如果为空则默认返回s。
这个限定词
在静态类内的静态方法的第一个参数之前使用
Linq集中使用它们(有关详细信息,请参见Enumerable类)。
??或空合并运算符??或空合并运算符是用于以下内容的语法糖:
1 | var2 = var1 == null ? something : var1; |
实际上,您可以用一行简单的代码替换上面的操作:
1 | var2 = var1 ?? something; |
1 | GetHtmlContent(this HttpRequest myRequest) |
好吧,这推断它是一个
When the first parameter of a method includes the this modifier, that
method is said to be an extension method. Extension methods can only
be declared in non-generic, non-nested static classes. The first
parameter of an extension method can have no modifiers other than
this, and the parameter type cannot be a pointer type.
另外,
1 | string something = maybenull ??"I cannot be null"; |
因此,当
这是一个空的装煤操作员,请参阅msdn解释。