1

下位互換性以外に、やむを得ない理由はありますか?

(null as string) == null; //true
4

5 に答える 5

18

expr as T意味

  • exprのインスタンスを指している場合T(T)expr
  • (T)null、 それ以外は

(そしてT、null 許容型である必要があります)

どの分岐を取っても、あらゆる に対してnull as Tが得られます。(T)nullT

于 2012-04-09T21:03:01.467 に答える
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/

于 2012-04-09T22:23:51.213 に答える
11

やむを得ない理由はありますか

はい、のnull以外のインスタンスとしてSystem.Stringキャストすることが理にかなっているインスタンスは1つもありません。次のように考えてください。はのインスタンスを参照していないため、null明らかnull is stringにfalseと評価する必要があります。は、の定義に従って、である必要があります。nullstringnull is stringfalsenull as stringnull as stringnull

下位互換性を超えて

何との下位互換性?

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

于 2012-04-09T21:05:29.657 に答える
3

これは、null文字列参照がnullに等しいためです。これを分解して「一時」変数を表示すると、理解がはるかに簡単になります。

 string temporary = null as string;
 bool result = temporary == null; // Obviously true still
于 2012-04-09T21:01:08.973 に答える
3

この式null as stringは、null に評価されるのと同じ理由で null に(string)null評価されます。null を文字列参照に変換すると、null 文字列参照が得られます。

于 2012-04-09T21:07:25.583 に答える