C # отражение получить объект из типа - PullRequest
1 голос
/ 14 марта 2011

У меня есть объект Type.Я хочу получить isntance объекта из этого типа.(просто использовать метод ToString () из этого объекта).см:

    public class P
{
    public string s;
}

class Program
{
    static void Main(string[] args)
    {
        P p = new P();
        p.s = "foobar";
       Type t = p.GetType();
       P p2 = ((t.ToObjet()) as P).s;

       Console.WriteLine(p2.s);
    }
}

Ответы [ 3 ]

10 голосов
/ 14 марта 2011

Activator.CreateInstance - это то, что вы хотите.

Type givenType;
var obj = Activator.CreateInstance(givenType);
...
var obj = Activator.CreateInstance(givenType) as GivenType;

РЕДАКТИРОВАТЬ: В зависимости от ваших правок, метод расширения на Type вы хотите (ToObject) фактически код выше.Он должен создать новый, потому что вы не можете быть уверены, что исходный объект все еще существует, и даже с типом, вы можете попасть в сценарий, в котором этот тип имеет несколько экземпляров.

1 голос
/ 14 марта 2011

Нет способа сделать это.Одна из причин заключается в том, что GetType вернет один и тот же экземпляр Type для всех экземпляров одного типа.

Вы можете проверить это следующим образом:

// this will print "True"
Console.WriteLine(object.ReferenceEquals("one".GetType(), "two".GetType()));

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

1 голос
/ 14 марта 2011

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

Например: если вы знаете, что что-то является целым числом, вы не знаете, какое именно значение оно имеет. (Целое число - ваш тип, значение - конкретный экземпляр.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...