0

重複の可能性:
C#で2つの疑問符を一緒に使用するとはどういう意味ですか?

これは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 で導入されたnull 合体演算子

thisin method -> C# 3.0 で導入された、既存の型の拡張メソッドを指定します。

于 2013-01-28T10:51:01.190 に答える
1

これは拡張メソッドを指します

拡張方法については、このリンクで包括的な詳細を見つけることができます


?? _ 演算子は null 合体演算子と呼ばれ、null 許容値型と参照型の既定値を定義するために使用されます。null でない場合は左側のオペランドを返します。それ以外の場合は、右側のオペランドを返します。

于 2013-01-28T10:49:20.933 に答える
0

これはヌル結合演算子です。MSDN の説明を参照してください。

于 2013-01-28T10:50:28.403 に答える
0
GetHtmlContent(this HttpRequest myRequest)

さて、これはそれがであると推測しますが、クラスは静的ではないExtension methodため、コードはコンパイルされますか

メソッドの最初のパラメーターに this 修飾子が含まれている場合、そのメソッドは拡張メソッドと呼ばれます。拡張メソッドは、非ジェネリックでネストされていない静的クラスでのみ宣言できます。拡張メソッドの最初のパラメーターは、これ以外の修飾子を持つことはできず、パラメーターの型をポインター型にすることはできません。

??null合体演算子でもあります

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

maybenullオブジェクトが null の場合、文字列に割り当てられた他の文字列を取得します。

于 2013-01-28T10:52:58.423 に答える
0

この予選

this静的クラス内の静的メソッドの最初のパラメーターの前に修飾子を使用する場合、そのメソッドは「拡張メソッド」と呼ばれます。基本的に、あなたはコンパイラーにこう言っています:「ねえ、このメソッドを変更せずに既存のクラスに追加したいのですが」。

LINQ はそれらを集中的に利用します (詳細については、列挙可能なクラスを参照してください)。

?? またはヌル合体演算子

?? または 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();

そして、リクエストをパラメーターとして GetHtmlContent を呼び出します。

?? null 合体演算子で、null のチェックを簡素化するために使用されます。

それ以外の

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

これは、文字列 s が null の場合は代わりにこの値を返し、null でない場合は s の値を返すことを意味します。単純に次のように記述できます。

戻り値 ??"デフォルト";

null でない場合は s を返し、s が null の場合は default を返します。

于 2013-01-28T10:54:35.947 に答える