Распаковка неизвестной структуры
От: nikov США http://www.linkedin.com/in/nikov
Дата: 31.07.06 14:59
Оценка:
public struct A
{
    internal A(object obj)
    {
        /* ... */
    }
    /* ... */
}

public struct B<T>
{
    public static explicit operator A(B<T> b) // любую реализацию генерика B<T> можно привести к A
    {
        return new A(b);
    }
    /* ... */
}


public class Test
{
    public static void Main()
    {
        B<int> b = new B<int>();
        object boxed = b;
        
        A a = unbox(boxed);
    }

    private static A unbox(object boxed)
    {
        // return (A) boxed; - InvalidCastException
        return (A) (B<int>) boxed; // распаковка и явное приведение типа
    }
}


В методе unbox я был вынужден написать два оператора приведения, чтобы сначала произошла распаковка, а потом явное приведение типа. Но в реальной ситуации в параметре boxed может лежать не B<int>, а B<double> или вообще любой B<T>. Как мне переписать строку

        return (A) (B<int>) boxed; // распаковка и явное приведение типа


чтобы я мог распаковать любой из этих объектов?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.