C# 如何为类型创建扩展方法
我正在编写一个扩展方法,用于解析任何给定类型的JSON字符串。我想在类型上使用该方法,而不是像我们已经知道的许多示例那样在实例上使用该方法,但我觉得VisualStudio不支持它。有人能给我点化一下吗?方法如下: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 =
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()甜蜜的。。。