Как создать методы расширения для типов - PullRequest
16 голосов
/ 04 декабря 2009

Я пишу метод расширения для разбора строки JSON для любого данного типа. Я хотел использовать метод для типов вместо экземпляров, как многие примеры, которые мы уже знаем, но я чувствую, что он не поддерживается Visual Studio. Может ли кто-нибудь просветить меня здесь? Ниже приведен метод:

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 ]

20 голосов
/ 04 декабря 2009

Короткий ответ: это невозможно сделать; методы расширения должны работать на экземпляре чего-либо.

3 голосов
/ 04 декабря 2009

Чтобы использовать метод расширения, вам нужно сделать:

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

Токен «MyClass» не является сам по себе Type, но использование typeof даст вам Type для работы. Но чем это лучше, чем:

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

Изменить: На самом деле, код для метода расширения все равно не будет делать то, что вы хотели. Он всегда будет возвращать объект «Тип», а не экземпляр этого Типа.

2 голосов
/ 04 декабря 2009

Вы не можете создавать методы расширения, которые применяются к самому типу. Они могут быть вызваны только для экземпляров типа.

...