struct Box<T>
{
private T value;
public T Value
{
get { return value; }
}
public Box(T value)
{
this.value = value;
}
}
Надо написать метод, который может принять значение любого типа вида Box<Box<...Box<T>...>> (где T не является инстанциацией типа Box<>), и извлечь значение типа T из самой внутренней "коробки". Желательно, чтобы код получился не громоздким.
Здравствуйте, nikov, Вы писали:
N>Надо написать метод, который может принять значение любого типа вида Box<Box<...Box<T>...>> (где T не является инстанциацией типа Box<>), и извлечь значение типа T из самой внутренней "коробки". Желательно, чтобы код получился не громоздким.
Как мне подсказал Mab, в некоторых очень особых случаях это тоже будет работать неверно (как, впрочем, и моё решение). И я не представляю, как это исправить, не заменяя полностью dynamic на рефлекшн. Моё решение, как мне кажется, совершенно эквивалентно по поведению этому коду, но не использует никакого рефлекшена (в т.ч. GetType() или typeof), но, правда, использует оператор is, чтобы обойти один очень хитрый баг (на который мне тоже указал Mab).
Здравствуйте, nikov, Вы писали:
N>Есть такой тип:
N>
N>struct Box<T>
N>{
N> private T value;
N> public T Value
N> {
N> get { return value; }
N> }
N> public Box(T value)
N> {
N> this.value = value;
N> }
N>}
N>
N>Надо написать метод, который может принять значение любого типа вида Box<Box<...Box<T>...>> (где T не является инстанциацией типа Box<>), и извлечь значение типа T из самой внутренней "коробки". Желательно, чтобы код получился не громоздким.