如何扩展类型类

时间:2013-08-30 10:57:02

标签: c# .net extension-methods

这是我的代码:

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新方法

来扩展类型类

3 个答案:

答案 0 :(得分: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")

顺便说一句,我认为这不会告诉你这种类型是否是“内置的”;它只会告诉您具有给定名称的类型是否已加载到流程中。

答案 1 :(得分:3)

扩展方法旨在描述实例上的新API,而不是类型。在您的情况下,该API将类似于:

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

......显然不是你想要的; type此处不添加任何内容,与IsBuiltIn无关。基本上没有向现有类型添加新静态方法的编译器技巧 - 因此您将无法使用Type.IsBuiltIn("Some.Other.Type")

答案 2 :(得分:0)

您无法扩展Type课程。您需要该类的实例来创建扩展方法。

编辑: 请参阅herehere