2016-04-10 14 views
0

このIsAssignableFromは、インターフェイスの継承

... 
if (!settingsType.IsAssignableFrom(typeof (ISettingsSource))) 
      throw new IncorrectCustomizationSourceTypeException(settingsType.Name, nameof(ISettingsSource)); 
... 

のようなものをやって、実際に私がsettingsType is instance of class which derived from a class that implements required interfaceにもかかわらず、私の素敵な例外が発生しましたをミス。 私が理解したように、型チェックのキャスト能力はパラメータで渡され、私の場合はうまくいくはずです。

このような状態を確認する適切な方法は何ですか?

ありがとうございます。

+0

あなたは「From」の代わりに「To」のように読んでいます。 –

答えて

2

IsAssignableFromは、人が最初に思うかもしれないものとは逆の直観的な形(すなわち反転)を持っています。あなたの条件は次のようになります。

if (!typeof(ISettingsSource).IsAssignableFrom(settingsType)) 

ドキュメントからこのパラグラフに従って:

戻り値型:
可能System.Boolean
以下の条件のいずれかに該当する場合:

...

現在の午後ceはcが実装するインタフェースです。

+0

+1私はそれが直感的なそのカウンターだとは思わないが。例えば。 'object'は' string'から代入可能です。したがって、 'typeof(object).IsAssignableFrom(typeof(string))'は 'true'です。 –

+0

はい、それは理にかなっていますが、私はほとんどの人間は、 "このタイプは、このタイプのベース"のようなものではなく、 "このタイプは派生しています"というような形式を期待していると思います。私たちの大部分は 'settingsType'を主題と考えており、主題は[通常は最初に](https://www.englishrules.com/writing/2005/subjects-and-verbs-and-sentence-order/)です。 – Alexei

+0

ありがとうございました!私は自分でそれを手に入れなかったのだろうか? – TakinosaJi

関連する問題