2

C# で次のようなことをしたい:

public bool ValidType(Type type)
{
    return _someVar is type;
}

ただし、C# はこの構文をサポートしていないようです。「is」の右側の項目は、型への参照ではなく、絶対型名でなければならないようです。

次のコードが機能しているように見えることがわかりました。

return _someVar.GetType().IsInstanceOfType(type) ||
    _someVar.GetType().IsSubclassOf(type) ||
    _SomeVar.GetType().IsAssignableFrom(type);

すべてのケースに適切に一致していないようにIsAssignableFrom見えるため、一部の型比較で必要と思われることを除いて、何が機能するのかわかりません。IsInstanceOfTypeIsSubclassOf

これは、変数が別の変数によって参照されているタイプのものであることをテストするための本当に最良の方法ですか、それとも私が見逃したより単純な構文がありますか?

4

2 に答える 2

4

IsAssignableFromで十分です。他の 2 つのテストは必要ありませんが、間違った方法で呼び出しています。正しい方法は次のとおりです。

public bool ValidType(Type type)
{
    return type.IsAssignableFrom(_someVar.GetType());
}

IsAssignableFrom の機能がわかりません

実際には、名前が示すとおりのことを行います。指定された型の変数が別の型の値から代入可能かどうかをテストします。

于 2012-10-07T19:35:48.460 に答える
1

Konradが述べたようIsAssignableFromに、テストには十分です。

指定された Type のインスタンスから現在の Type のインスタンスを割り当てることができるかどうかを判断します。

http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx

他の 2 つのチェックは必要ありません。これらの場合IsAssignableFromも true になるからです。

于 2012-10-07T19:37:33.917 に答える