下位互換性以外に、やむを得ない理由はありますか?
(null as string) == null; //true
expr as T
意味
expr
のインスタンスを指している場合T
、(T)expr
(T)null
、 それ以外は(そしてT
、null 許容型である必要があります)
どの分岐を取っても、あらゆる に対してnull as T
が得られます。(T)null
T
あなたの質問は漠然としていて、本質的に答えられないので、私はそれに答えようとはしません. あなたが本当に望むのは、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以外のインスタンスとしてSystem.String
キャストすることが理にかなっているインスタンスは1つもありません。次のように考えてください。はのインスタンスを参照していないため、null
明らかnull is string
にfalseと評価する必要があります。は、の定義に従って、である必要があります。null
string
null is string
false
null as string
null as string
null
下位互換性を超えて
何との下位互換性?
質問をさせてください。null以外のどのインスタンスを評価する必要があるstring
と思いますnull as string
か?
これは、null文字列参照がnullに等しいためです。これを分解して「一時」変数を表示すると、理解がはるかに簡単になります。
string temporary = null as string;
bool result = temporary == null; // Obviously true still
この式null as string
は、null に評価されるのと同じ理由で null に(string)null
評価されます。null を文字列参照に変換すると、null 文字列参照が得られます。