Я пытаюсь создать универсальное расширение, которое использует "TryParse" , чтобы проверить, является ли строка заданным типом:
public static bool Is<T>(this string input)
{
T notUsed;
return T.TryParse(input, out notUsed);
}
это не будет компилироваться, поскольку он не может разрешить символ "TryParse"
Как я понимаю, "TryParse" не является частью какого-либо интерфейса.
Можно ли вообще это сделать?
Update:
Используя приведенные ниже ответы, я придумал:
public static bool Is<T>(this string input)
{
try
{
TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input);
}
catch
{
return false;
}
return true;
}
Это работает очень хорошо, но я думаю, что использование исключений таким образом мне не подходит.
Update2:
Изменено для типа передачи, а не для использования дженериков:
public static bool Is(this string input, Type targetType)
{
try
{
TypeDescriptor.GetConverter(targetType).ConvertFromString(input);
return true;
}
catch
{
return false;
}
}