Универсальный Кастинг - PullRequest
2 голосов
/ 25 февраля 2012

Я подозреваю, что ответ отрицательный, но возможно ли сделать что-то подобное в C # .NET (v2.0).

class Converter<E>
{
    public E Make(object o)
    {
        return o as E;
    }
}

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

public bool IsType(object o, Type t)
{
    return o is E;
}

Я не уверен в терминологии, поэтому для меня это довольно сложно для Google.Но я думаю, что эти две проблемы связаны.Есть идеи?

1 Ответ

5 голосов
/ 25 февраля 2012

Вы можете разыграть o на E, используя () Оператор :

class Converter<E>
{
    public E Make(object o)
    {
        return (E)o;
    }
}

Если вы используете как, o as E требует, чтобы E был ссылочным типом, потому что если o не может быть преобразовано в E, результат будет (E)null.Вы можете ограничить E ссылочными типами, используя класс Ограничение :

class Converter<E> where E : class
{
    public E Make(object o)
    {
        return o as E;
    }
}

public bool IsType(object o, Type t)
{
    return (o != null) ? t.IsAssignableFrom(o.GetType()) : t.IsClass;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...