C# での IsAssignableFrom と "is" キーワードの使用 質問する

C# での IsAssignableFrom と

学ぼうとしながら団結GetControllerInstance、 MVC でオーバーライドするための次のコードをよく見かけます。

if(!typeof(IController).IsAssignableFrom(controllerType)) { ... }

これは私にとっては、かなり複雑な書き方のように思える

if(controllerType is IController) { ... }

isとの間には微妙な違いがあることは理解しています。つまり、IsAssignableFromにはIsAssignableFromキャスト変換が含まれませんが、実際のシナリオでこの違いがどのような意味を持つのか理解するのに苦労しています。

IsAssignableFromいつを選択することが重要になりますかis? それによって にどのような違いが生じますかGetControllerExample?

if (!typeof(IController).IsAssignableFrom(controllerType))
      throw new ArgumentException(...);
return _container.Resolve(controllerType) as IController;

ベストアンサー1

それは同じではありません。

if(controllerType is IController)

だろういつもは常に であり、 は決して ではないfalseため、は と評価されます。controllerTypeTypeTypeIController

このis演算子は、実例特定のタイプと互換性があります。

IsAssignableFromメソッドは、タイプ指定されたタイプと互換性があります。

おすすめ記事