Я ожидаю, что один из двух ответов на это, либо невозможно, либо очень просто, и я упустил очевидный запрос Google.
Основная проблема заключается в том, что у меня есть общий объект, который передается через EventHandler
, который блокирует объект и обфускает истинный тип; я знаю, что это за объект.
По общему признанию ключевое слово dynamic
может обойти эту проблему, но я бы не потерял IntelliSense и все, если я смогу избежать этого. Кроме того, он не решает, не зная, что каждое из свойств универсального объекта не имеет большого количества отражения.
EDIT: Идея состоит в том, чтобы иметь возможность определять истинный тип объекта в параметре метода, а затем использовать этот объект как истинный тип, не зная об этом заранее. Это лишь упрощенный пример. В коробке, возможно, был неправильный термин.
Пример:
public class Program
{
static void Main(string[] args)
{
var container = new Container<Containee>(
new Containee
{
Property1 = Guid.NewGuid(),
Property2 = "I'm a property!",
Property3 = DateTime.Now
}
);
var boxed = (object)container;
var originalType = boxed.GetType();
// DOES NOT COMPILE: would like an operation like this
// EDIT: Request for more detail
var actualType = boxed as originalType;
actualType.Entity.Property2 = "But I like this better.";
}
}
public class Containee
{
public Guid Property1 { get; set; }
public string Property2 { get; set; }
public DateTime Property3 { get; set; }
}
public class Container<T>
{
public Container(T entity)
{
Entity = entity;
}
public T Entity { get; internal set; }
}
Очевидно, что это не будет компилироваться, так как на самом деле не существует способа для добавления в качестве переменной. Тем не менее, я надеюсь, что есть способ получить ссылку на фактический объект и тип, или, по крайней мере, способ динамического воссоздания типа.
Я ожидаю, что что-то простое, о чем я не замечаю, или лучший способ обойти его в целом. Дело в том, чтобы иметь возможность обернуть любой объект в контейнере и выяснить позже, что это было.