代码之家  ›  专栏  ›  技术社区  ›  Codism

如何为类型创建扩展方法

  •  16
  • Codism  · 技术社区  · 15 年前

    我正在编写一个扩展方法,用于解析任何给定类型的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 = MyClass.ParseJson(text);
    

    谢谢

    3 回复  |  直到 15 年前
        1
  •  25
  •   David Hedlund    15 年前

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

        2
  •  7
  •   Chris Pitman    15 年前

    var instance = typeof(MyClass).ParseJson(text);
    

    标记“MyClass”不是instamce intself类型,但使用typeof将获得一个要操作的类型。但这怎么比:

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

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

        3
  •  2
  •   LukeH    15 年前

        4
  •  0
  •   pasx    5 年前

    public static T ParseJson<T>(this T t, string s)
    

    您可以编写如下实用程序方法:

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

    var t = Utilities.ParseJson<T>(s);
    

    恐怕这是你能做的最好的了。。。