Подтвердить что ты не робот

Передача с GetType()

Можно ли применить объект к типу, возвращаемому с GetType()? Мне нужен универсальный метод, который может принять объект (для анонимных типов), но затем вернуть объект в виде анонимного типа. Я думал об использовании LCG DynamicMethod для создания метода в классе контейнеров, но я не могу точно понять, как это будет выглядеть. Идея бросить с помощью метода GetType() заключалась в том, чтобы получить анонимный тип и подвергнуть объект его фактическому типу, не зная его тип.

Основная задача состоит в том, чтобы вставлять в контейнер объекты, помеченные анонимным шрифтом, которые я мог бы передавать и передавать между методами.

4b9b3361

Ответ 1

Ваше намерение очень неясное; однако один вариант - это дженерики и MakeGenericMethod в частности. Что вы хотите сделать с этим? Например:

static class Program
{
    static void Main()
    {
        object obj = 123.45;
        typeof(Program).GetMethod("DoSomething")
            .MakeGenericMethod(obj.GetType())
            .Invoke(null, new object[] { obj });
    }
    public static void DoSomething<T>(T value)
    {
        T item = value; // well... now what?
    }    
}

Итак, теперь у нас есть значение, введенное как double через generics - но с ним все еще мало что можно сделать, кроме вызова других общих методов... что вы хотели бы здесь сделать?

Ответ 2

Я не могу придумать, почему вы хотите использовать как GetType(), потому что вы не сможете ничего сделать для полезного результата, не зная тип во время компиляции.

Возможно, то, что вы ищете, может конвертировать. Если это так, для вас должно работать следующее:

object input = GetSomeInput();
object result = Convert.ChangeType(input, someOtherObject.GetType());

Мы используем это при чтении значений из реестра, которые все хранятся как строки, а затем накладывают их на свойства с использованием отражения.

Ответ 3

Вы можете использовать метод Activator.CreateInstance для создания экземпляра из типа.

Отражение FYI - это SLOOWWWW, поэтому, если вам нужно делать это несколько раз подряд, может быть лучше определить ваши типы в перечислении или что-то в этом роде, а затем создать экземпляры без использования отражения.

Ответ 4

Вы можете использовать getClass(), который возвращает объект класса, а затем использовать метод cast в объекте Class для приведения объекта к объекту этого типа класса, например:

myObj.getClass(). Литая (myObj)