タイプを比較する方法


130

簡単な質問:Type型(意図しないpun)をC#の別の型と比較する方法は?私は意味、私がきたType typeFieldと私はそれがあるかどうかを知りたいSystem.StringSystem.DateTimeなどが、typeField.Equals(System.String)動作しません。

どんな手掛かり?

回答:


179

以下をお試しください

typeField == typeof(string)
typeField == typeof(DateTime)

typeofC#の演算子はType、名前付きの型のオブジェクトを提供します。 Typeインスタンスは==演算子と同等であるため、これはそれらを比較するための優れた方法です。

注:私が正しく覚えている場合、関係する型が(NoPIAを介して)アセンブリに埋め込まれているCOMインターフェイスである場合、これが機能しない場合があります。このように聞こえませんか?



32

次を使用して、まったく同じタイプを比較できます。

class A {
}
var a = new A();
var typeOfa = a.GetType();
if (typeOfa == typeof(A)) {
}

typeofは、指定されたクラスからTypeオブジェクトを返します。

しかし、Aから継承するタイプBがある場合、この比較は偽になります。そして、あなたはIsAssignableFromを探しています

class B : A {
}
var b = new B();
var typeOfb = b.GetType();

if (typeOfb == typeof(A)) { // false
}

if (typeof(A).IsAssignableFrom(typeOfb)) { // true
}

7

インスタンスが次の場合Type

Type typeFiled;
if (typeField == typeof(string))
{ 
    ... 
}

しかし、インスタンスが使用演算子でobjectあり、Type使用as演算子ではない場合:

object value;
string text = value as string;
if (text != null)
{
    // value is a string and you can do your work here
}

これには、value指定した型に一度だけ変換するという利点があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.