何らかのやむを得ない理由があるのは、後方互換性を超えて、ために:"null as string"を返すという決定の根拠は何ですか?nullを返しますか?
(null as string) == null; //true
何らかのやむを得ない理由があるのは、後方互換性を超えて、ために:"null as string"を返すという決定の根拠は何ですか?nullを返しますか?
(null as string) == null; //true
あなたの質問はあいまいで本質的に答えることができないので、私はそれに答えるつもりはありません。あなたが本当にしたいことはas
オペレータに入った設計上の考慮事項のエッセイである場合は、以下を参照してください。
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/
これはヌル文字列参照がnullに等しいという理由だけです。あなたはこれを破ると、 "一時的な" 変数を表示した場合、それは理解することがはるかに簡単です:
string temporary = null as string;
bool result = temporary == null; // Obviously true still
expr as T
は、T
、その後、(T)expr
(T)null
のインスタンスに
expr
かのポイントを意味し、それ以外の場合は(また、T
はnull可能型でなければなりません)
どの支店を利用しても、null as T
はT
の場合は(T)null
になります。
はい、私はその部分を理解しています - "as"を意味するものにする設計上の考慮事項を知りたいと思っています。 – blueberryfields
@blueberryfields:Javaコードは '(expr instanceof T)? (T)expr:(T)null'の場合、C#チームは明らかにその操作に専用の演算子を持つことが良いと思っていました。実際に頻繁に現れるコードを最適化することは良いことです。 –
それは感覚を作るが、失望している。言語にキーワードを追加するという手間がかかっているので、簡略化して愚かなように聞こえます。 – blueberryfields
何らかのやむを得ない理由
がありますはい、System.String
のインスタンスのシングルは、それが非ヌルインスタンスとしてnull
キャストすることは理にかなっていることがありません。 null
はstring
のインスタンスを参照していないので、明らかにnull is string
はfalseと評価する必要があります。 null is string
はfalse
であるため、null as string
の定義に従って、null as string
はnull
である必要があります。
後方互換性を超えた
ものとの後方互換性?
あなたに質問をさせてください。 string
のnull以外のインスタンスは、null as string
と評価する必要がありますか?
(string)null
はnullと評価されるため、式null as string
はnullと評価されます。nullを文字列参照に変換すると、null文字列参照が返されます。
をなぜそれが何か他のものでしょうか? – delnan
私はあなたにその反対を尋ねることができました:なぜ '(nullとして文字列)== null'は真実ではありませんか?代わりに価値は何であるべきですか? – FishBasketGordo
あなたはここで「後方互換性」について話していますか? –