У меня есть универсальный класс, и я хочу обеспечить, чтобы экземпляры параметра типа всегда были "преобразуемыми" / конвертируемыми из String. Можно ли это сделать, например, без использования интерфейса?
Возможная реализация:
public class MyClass<T> where T : IConvertibleFrom<string>, new()
{
public T DoSomethingWith(string s)
{
// ...
}
}
Идеальная реализация:
public class MyClass<T>
{
public T DoSomethingWith(string s)
{
// CanBeConvertedFrom would return true if explicit or implicit cast exists
if(!typeof(T).CanBeConvertedFrom(typeof(String))
{
throw new Exception();
}
// ...
}
}
Причина, по которой я бы предпочел эту «идеальную» реализацию, главным образом состоит в том, чтобы не заставлять все Ts реализовывать IConvertibleFrom <>.