Можно ли передать тип переменной в универсальный метод? (C#)

174
27 ноября 2018, 03:40

Итак, допустим у нас есть следующий код:

public abstract class Letters
{
    //Код...
}
public class A : Letters { }
public class B : Letters { }
public class C : Letters { }
class Program
{
    public static void Method<T>() where T : Letters
    {
        //Код...
    }
    static void Main(string[] args)
    {
        //Допустим, мы не контролируем, какой именно тип сюда попадает, но он точно относится к иерархии класса Letters.
        Letters obj = new A();
        Type type = obj.GetType();
        Method<type>(); //???
    }
}

Есть ли хоть какой то вариант передать тип переменной obj в универсальный метод, или это не допустимо, ну а если можно, то как?

Да, я видел похожий вопрос здесь, но он не решает мою проблему.

Answer 1

Можно через рефлексию

typeof(Program)
    .GetMethod(nameof(Method))
    .MakeGenericMethod(type)
    .Invoke(obj : null, parameters : null);
Answer 2

Есть ли хоть какой то вариант передать тип переменной obj в универсальный метод, или это не допустимо, ну а если можно, то как?

Если вы правильно сформулировали свой вопрос, то передать тип переменной obj в метод можно в качестве параметра типа Type:

public static void Method<T>(Type type) where T : Letters
{
    //Код...
}

И вызывать метод так:

Method<Letters>(obj.GetType());

Я не знаю, зачем это нужно. Я почти уверен, что вы не этого хотите. Но ИМХО, ответ на ваш вопрос дан.

READ ALSO
Ошибка при сериализации DataGrid

Ошибка при сериализации DataGrid

После нажатия на кнопку, должно содержимое DataGrid должно экспортироваться в XML при помощи сериализации, но происходит ошибка:

156
Неполадка в работе стиля

Неполадка в работе стиля

Создал свой стиль чекбокса на основе стиля из сети (слайдер)Проблема в том, что если создать этот слайдер с дефолтным параметром IsChecked = true, то при...

153
Распарсить Xml ответ от сервера

Распарсить Xml ответ от сервера

От сервера приходит ответ

231