2012-04-09 8 views
1

何らかのやむを得ない理由があるのは、後方互換性を超えて、ために:"null as string"を返すという決定の根拠は何ですか?nullを返しますか?

(null as string) == null; //true 
+17

をなぜそれが何か他のものでしょうか? – delnan

+5

私はあなたにその反対を尋ねることができました:なぜ '(nullとして文字列)== null'は真実ではありませんか?代わりに価値は何であるべきですか? – FishBasketGordo

+3

あなたはここで「後方互換性」について話していますか? –

答えて

12

あなたの質問はあいまいで本質的に答えることができないので、私はそれに答えるつもりはありません。あなたが本当にしたいことはasオペレータに入った設計上の考慮事項のエッセイである場合は、以下を参照してください。

http://blogs.msdn.com/b/ericlippert/archive/2009/10/08/what-s-the-difference-between-as-and-cast-operators.aspx

http://blogs.msdn.com/b/ericlippert/archive/2010/09/16/is-is-as-or-is-as-is.aspx

そして、あなたは変換分析の役割のより一般的な話題に興味があるならばC#の型システムでは、以下を参照してください。

http://blogs.msdn.com/b/ericlippert/archive/tags/conversions/

3

これはヌル文字列参照がnullに等しいという理由だけです。あなたはこれを破ると、 "一時的な" 変数を表示した場合、それは理解することがはるかに簡単です:

string temporary = null as string; 
bool result = temporary == null; // Obviously true still 
18

expr as Tは、T、その後、(T)expr

  • (T)nullのインスタンスに

    • exprかのポイントを意味し、それ以外の場合は

    (また、Tはnull可能型でなければなりません)

    どの支店を利用しても、null as TTの場合は(T)nullになります。

  • +0

    はい、私はその部分を理解しています - "as"を意味するものにする設計上の考慮事項を知りたいと思っています。 – blueberryfields

    +3

    @blueberryfields:Javaコードは '(expr instanceof T)? (T)expr:(T)null'の場合、C#チームは明らかにその操作に専用の演算子を持つことが良いと思っていました。実際に頻繁に現れるコードを最適化することは良いことです。 –

    +0

    それは感覚を作るが、失望している。言語にキーワードを追加するという手間がかかっているので、簡略化して愚かなように聞こえます。 – blueberryfields

    11

    何らかのやむを得ない理由

    がありますはい、System.Stringのインスタンスのシングルは、それが非ヌルインスタンスとしてnullキャストすることは理にかなっていることがありません。 nullstringのインスタンスを参照していないので、明らかにnull is stringはfalseと評価する必要があります。 null is stringfalseであるため、null as stringの定義に従って、null as stringnullである必要があります。

    後方互換性を超えた

    ものとの後方互換性?

    あなたに質問をさせてください。 stringのnull以外のインスタンスは、null as stringと評価する必要がありますか?

    3

    (string)nullはnullと評価されるため、式null as stringはnullと評価されます。nullを文字列参照に変換すると、null文字列参照が返されます。

    関連する問題