Проверка, поддерживает ли тип неявное или явное преобразование типа в другой тип с помощью .NET - PullRequest
8 голосов
/ 05 сентября 2010

Представьте, что вы получили два типа System.Type, и вы хотите определить, существует ли неявное или явное преобразование типов из одного в другое.

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

Я знаю, что это краткое изложение вопроса, но я думаю, что сценарий относительно легко объяснить, дайте мне знать, если нет.

Заранее спасибо, Стивен.

Ответы [ 4 ]

8 голосов
/ 05 сентября 2010

Expression.Convert может искать пользовательский оператор преобразования, но, к сожалению, он просто выдаст исключение, если ничего не найдено.Вы можете использовать это так:

public static bool CanConvert(Type fromType, Type toType)
{
    try
    {
        // Throws an exception if there is no conversion from fromType to toType
        Expression.Convert(Expression.Parameter(fromType, null), toType);
        return true;
    }
    catch
    {
        return false;
    }
}
7 голосов
/ 05 сентября 2010

Я так не думаю.Вам придется использовать отражение и искать те хорошие старые op_Implicit и op_Explicit статические методы для каждого типа.

Это поднимает очень интересный вопрос: который оказывает большее влияние на производительность отражение (этот ответ) или использование исключений для потока управления ( Quartermeister's )?Я, честно говоря, не мог догадаться.Возможно, вы захотите профилировать каждого и выяснить для себя.

0 голосов
/ 05 сентября 2010

Я думаю Type.IsAssignableFrom должно дать вам то, что вам нужно.

[править] обратите внимание, что это НЕ учитывает операторы преобразования, поэтому возможно, что это не полезно для вас. Стоит упомянуть в любом случае.

0 голосов
/ 05 сентября 2010

Вы можете попробовать привести каждого к другому и поймать исключение

...