3

特定のタイプの場合、ベースオブジェクトをチェックする最良の方法は何ですか。myObjectは「n」レベルの階層を持つことができます。myObjectは動的であり、車両へのアセンブリアクセスがないため、文字列と比較したいと思います。

a)車:車両
b)自転車:TwoWheeler:車両
c)トラック:トレーラー:FourWheeler:車両

dynamic myObject = someObject;
if(myObject is Vehicle)  // Works
if(myObject is "Vehicle") //How to ?
4

2 に答える 2

2

IsAssginableFrom を使用できます

System.Type.GetType(typeNameAsString).IsAssignableFrom(myObject.GetType())

typeNameAsString に保持されている名前 (文字列) によって識別される型の格納場所に myObject を割り当てることができるかどうかをテストします。

これは、実際にロードされた型に対してのみ機能し、完全修飾名を使用する必要があります。

于 2012-10-20T18:14:23.340 に答える
0

それを解決するために少し再帰的な方法を書きました:

 private bool IsVehicle(Type type)
        {
            if (type.BaseType != null)
                if (type.BaseType.FullName == "Vehicle")
                    return true;
                else
                    return IsVehicle(type.BaseType);
            return false;
        }
于 2012-10-20T19:23:23.090 に答える