Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何扩展类型类_C#_.net_Extension Methods - Fatal编程技术网

C# 如何扩展类型类

C# 如何扩展类型类,c#,.net,extension-methods,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)

这是我的代码:

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;
        }
    }

请使用内置的新方法扩展类型类

您不能扩展
类型
类。您需要类的实例来创建扩展方法

编辑:
请参阅和。

您不能扩展
类型
类。您需要类的实例来创建扩展方法

编辑:
请参阅和。

不能使用静态扩展方法。您的扩展方法适用于
类型
类的实例,因此要调用它,您必须执行以下操作:

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")

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

您不能使用静态扩展方法。您的扩展方法适用于
类型
类的实例,因此要调用它,您必须执行以下操作:

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")

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

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

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

哪个。。。显然这不是你想要的;此处的
类型
不添加任何内容,并且与
IsBuiltIn
无关。基本上,向现有类型添加新的静态方法没有编译器技巧,因此您将无法使用
Type.IsBuiltIn(“Some.Other.Type”)
扩展方法旨在描述实例上的新API,而不是类型。在您的情况下,该API类似于:

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

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

您不需要在此处使用扩展方法将
typeof(int.IsBuiltIn
写入编辑器。您看到了什么?传递给IsBuiltIn()方法的字符串应该是该类型的程序集限定名。我的意思是你应该通过System.Int32而不是int“int”不是内置类型。它是C#编译器特有的别名。其他语言使用其他别名,如VB.NET中的“整数”。考虑到只有少数别名(不要忘记可为空的别名),您可以硬编码它们的名称。或者干脆不这样做。
IsBuiltIn
何时返回false?您不需要在此处使用扩展方法将
typeof(int).IsBuiltIn
写入编辑器。您看到了什么?传递给IsBuiltIn()方法的字符串应该是该类型的程序集限定名。我的意思是你应该通过System.Int32而不是int“int”不是内置类型。它是C#编译器特有的别名。其他语言使用其他别名,如VB.NET中的“整数”。考虑到只有少数别名(不要忘记可为空的别名),您可以硬编码它们的名称。或者干脆不这样做。
IsBuiltIn
什么时候返回false?为什么??为什么不能这样做?@SriramSakthivel不,您需要一个类类型的实例。你不能扩展类本身。当我否决你的答案时,你的答案只是这
你不能扩展类型类
这有意义吗?你当然可以为
类型
编写扩展方法。对于ex
“.GetType().IsBuiltIn(”
)可以工作(尽管我看不出这样做的理由)。我正在编辑我的答案。现在你可以找到两个链接来解释为什么你不能这么做。为什么??为什么不能这样做?@SriramSakthivel不,您需要一个类类型的实例。你不能扩展类本身。当我否决你的答案时,你的答案只是这
你不能扩展类型类
这有意义吗?你当然可以为
类型
编写扩展方法。对于ex
“.GetType().IsBuiltIn(”
)可以工作(尽管我看不出这样做的理由)。我正在编辑我的答案。现在你可以找到两个链接来解释为什么你不能这么做。