C# 如何为类型创建扩展方法

C# 如何为类型创建扩展方法,c#,extension-methods,C#,Extension Methods,我正在编写一个扩展方法,用于解析任何给定类型的JSON字符串。我想在类型上使用该方法,而不是像我们已经知道的许多示例那样在实例上使用该方法,但我觉得VisualStudio不支持它。有人能给我点化一下吗?方法如下: public static T ParseJson<T>(this T t, string str) where T: Type { if (string.IsNullOrEmpty(str)) return null; var serializer =

我正在编写一个扩展方法,用于解析任何给定类型的JSON字符串。我想在类型上使用该方法,而不是像我们已经知道的许多示例那样在实例上使用该方法,但我觉得VisualStudio不支持它。有人能给我点化一下吗?方法如下:

public static T ParseJson<T>(this T t, string str) where T: Type
{
    if (string.IsNullOrEmpty(str)) return null;
    var serializer = new JavaScriptSerializer();
    var obj = serializer.Deserialize<T>(str);
    return obj;
}

谢谢

简而言之,这是做不到的;扩展方法需要处理某个对象的实例。

不能创建应用于类型本身的扩展方法。只能在类型的实例上调用它们。

要使用扩展方法,必须执行以下操作:

var instance = typeof(MyClass).ParseJson(text);
标记“MyClass”不是instamce intself类型,但使用typeof将获得一个要操作的类型。但这怎么比:

var instance = JsonUtility.ParseJson<MyClass>(text);
var instance=JsonUtility.ParseJson(文本);

编辑:实际上,扩展方法的代码仍然不能满足您的需要。它将始终返回一个“Type”对象,而不是该类型的实例。

如接受答案中所述,您不能。但是,如果您有一个可从T实例调用的扩展方法:

public static T ParseJson<T>(this T t, string s)
public static T ParseJson(这个T,字符串s)
您可以编写如下实用程序方法:

public static T ParseJson<T>(string s)
    where T: new()
    => new(T).ParseJson(s);
var t = Utilities.ParseJson<T>(s);
publicstatict-ParseJson(字符串s)
其中T:new()
=>new(T).ParseJson(s);
这样称呼它:

public static T ParseJson<T>(string s)
    where T: new()
    => new(T).ParseJson(s);
var t = Utilities.ParseJson<T>(s);
var t=Utilities.ParseJson;

恐怕这是您能做的最好的了…

请注意,
ParseJson
使用此定义返回一个
Type
而不是
MyClass
。谢谢您的帮助。我实际上尝试了var instance=typeof(MyClass).ParseJson(text);不工作且为该类型的null实例,该类型是ext.methods的赎回值之一:)string val=null;val.IsNullOrEmpty()甜蜜的。。。