Это должно скомпилировать и работать.
даю, что есть один из двух ответов на этот вопрос, либо невозможный, либо чрезвычайно простой, и я упустил очевидный запрос Google.
Основная проблема заключается в том, что у меня есть общий объект, передаваемый черезEventHandler
который упаковывает объект и запутывает истинный тип; только во время выполнения я знаю, что это за объект.
По общему признаниюdynamic
Ключевое слово может обойти проблему, но я хотел бы не потерять IntelliSense и все остальное, если я могу избежать этого. Плюс, это не решает не зная, что каждое из свойств универсального объекта является без огромного количества размышлений.
РЕДАКТИРОВАТЬ: Идея состоит в том, чтобы иметь возможность определить истинный тип объекта в параметре метода, а затем привести этот объект к истинному типу, не зная его заранее. Это всего лишь упрощенный пример. В штучной упаковке, возможно, был неправильный термин.
Пример:
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; }
}
Понятно, что это не скомпилируется, поскольку на самом деле нет способа приведения в качестве переменной. Однако я надеюсь, что есть способ получить ссылку на реальный объект и тип или, по крайней мере, способ динамического воссоздания типа.
Я ожидаю, что есть кое-что простое, что я пропускаю, или лучший способ обойти это вообще. Суть в том, чтобы иметь возможность обернуть любой объект в контейнере и выяснить позже, что это было.