У меня есть System.Type определенного объекта, но нужно передать это как Type Parameter T другому методу ... это как-то возможно? Или я потерялся в более широкой картине?Получить тип параметра T из экземпляра System.Type?
ответ
Это невозможно. Если вы думаете об этом, параметр типа задается во время компиляции, тогда как System.Type разрешается путем отражения во время выполнения.
Теперь, сказав, что это невозможно, можно использовать отражение. Если вы создадите класс с отражением, вы можете передать его в System.Type в качестве параметра, но, вероятно, стоит переоценить то, что вы пытаетесь сделать.
EDIT: Вот некоторые идеи для редизайна.
Откуда берется System.Type? Не могли бы вы передать его как параметр типа, чтобы его можно было пропустить?
Если нет, можете ли вы сделать адаптер, который обрабатывает известные типы, которые будут использоваться? Возможно, оператор switch, который преобразует из System.Type в правильный тип общего вызова? Все происходит быстрее, чем отражение.
Вы можете сделать это, используя отражение.
Вы не хотите менять свой дизайн вместо этого (чтобы избежать рефлексации)? Таким образом, вы можете передать свой тип в качестве параметра:
DoSomething(yourObject.GetTaype());
Рассмотрите возможность использования альтернативного дизайна. Общие типы предназначены для статического разрешения во время компиляции.
Все еще, это возможно. Вам необходимо прибегнуть к размышлениям:
public class TypeReporter<T> {
public TypeReporter() {
Console.WriteLine("this type is: {0}", typeof(T));
}
// other methods
}
public class StackOverflow694683 {
static void Main() {
string n = "..."; // Pick a type, such as System.String.
Type arg = Type.GetType(n);
Type genericClass = typeof(TypeReporter<>);
Type createdClass = genericClass.MakeGenericType(arg);
// Result is of TypeReporter<T> type. Invoke desired methods.
object result = Activator.CreateInstance(createdClass);
}
}
То, о чем вы просите, не возможно в .Net. Параметры типа - это операция типа компиляции в .Net (C# и VB). Экземпляр System.Type - это среда выполнения. Любые запросы о реальном типе за System.Type должны выполняться во время выполнения. Таким образом, решения несовместимы.
Для примера:
public void DoSomething<T>(T value) {
// Do something with a value of type T
}
public Example1() {
DoSomething(42); // Calls DoSomething<int>
Type t1 = typeof(int);
DoSomething(t1); // Calls DoSomething<Type>
object o1 = 42;
Type t2 = o1.GetType();
DoSomething(???) // No way to call DoSomething<int> here without some
// wild reflection because the call to DoSomething is
// established at compile type where t2 is established
// at runtime
}
Что вы обычно делаете, чтобы иметь перегруженные для универсального метода, специально для этих видов деятельности. Например:
Load<T>();
Load(Type type);
Вот что -I- обычно, но метод является сторонним, и он принимает только SomeMethod
- 1. T-SQL UDF, получить тип данных параметра
- 2. Как я могу получить тип параметра экземпляра экземпляра?
- 3. Как индексировать из System.Type
- 4. Отражения - Получение общих параметров из экземпляра System.Type
- 5. T - тип параметра или тип класса?
- 6. Получить тип родового параметра
- 7. Как получить правильный тип T
- 8. Как найти system.Type параметра MethodDeclaractionSyntax с roslyn?
- 9. Как получить T * от параметра шаблона T, T & или T *
- 10. Тип карты из System.Type в xs: type
- 11. Инициализировать общий объект из System.Type
- 12. Как получить тип обнуляемого <T> экземпляра
- 13. Linq Литой <T> с System.Type
- 14. Как получить тип общего параметра?
- 15. System.Type to XmlSchema встроенный тип
- 16. Получить тип общего параметра
- 17. Создание экземпляра родового типа из экземпляра параметра типа
- 18. Тип поля экземпляра определяющего параметра при исполнении
- 19. Данная System.Type T, Deserialize List <T>
- 20. Невозможно преобразовать тип 'T' в 'T'?
- 21. Получить тип переменной из параметра using powershell
- 22. VB.NET Получить базовый тип system.type от типа nullable
- 23. Найти Тип параметра Тип
- 24. Тип экземпляра Java Pass объекта для универсального параметра типа класса
- 25. Получить общий тип от параметра
- 26. Получить тип параметра с отражением
- 27. Как C# Тип System.Type имеет свойство name
- 28. Получить фактический тип параметра общего объекта
- 29. Как получить тип экземпляра исключения?
- 30. Java - Как получить тип параметра из параметризованных аргумента
Можете ли вы опубликовать свой образец кода? –