1

これは私のコードです:

bool ch=Type.IsBuiltIn("System.Int32");   // not working-> syntax error


public static class MyExtentions
    {             
        public static bool IsBuiltIn(this Type t, string _type)
        {
            return (Type.GetType(_type) == null) ? false : true;
        }
    }

IsBuiltIn 新しいメソッドによるタイプ クラスの拡張が必要です

4

3 に答える 3

6

静的拡張メソッドを持つことはできません。拡張メソッドはクラスのインスタンスTypeで機能するため、それを呼び出すには、次のようにする必要があります。

typeof(Type).IsBuiltIn("System.Int32")

これを回避するには、次のように拡張メソッドをユーティリティ クラスに配置し、通常の静的関数のように呼び出します。

public static class TypeExt
{             
    public static bool IsBuiltIn(string _type)
    {
        return Type.GetType(_type) == null;
    }
}

// To call it:
TypeExt.IsBuiltIn("System.Int32")

ちなみに、これで型が「組み込み」かどうかはわかりません。指定された名前の型がプロセスにロードされているかどうかを通知するだけです。

于 2013-08-30T11:19:17.083 に答える
3

拡張メソッドは、型ではなく、インスタンスの新しい API を記述することを目的としています。あなたの場合、その API は次のようになります。

Type someType = typeof(string); // for example
bool isBuiltIn = someType.IsBuiltIn("Some.Other.Type");

これは...明らかにあなたが望んでいたものではありません。typeここでは何も追加せず、 とは関係ありませんIsBuiltIn。基本的に、新しい静的メソッドを既存の型に追加するためのコンパイラのトリックはありません。したがって、 Type.IsBuiltIn("Some.Other.Type").

于 2013-08-30T11:20:45.507 に答える
0

Typeクラスを延長することはできません。拡張メソッドを作成するには、クラスのインスタンスが必要です。

編集:ここここを参照してください。

于 2013-08-30T11:03:39.943 に答える