Для следующего общего класса c # я хотел бы преобразовать T в K:
public abstract class ValueType<T,K> : IValueType<T> where K : ValueType<T,K>,new()
{
public abstract T Value { get; set; }
public static implicit operator ValueType<T,K>(T val)
{
K k = new K();
k.Value = val;
return k;
}
}
Если бы я реализовал прямой оператор implicit operator K(T val)
, это привело бы к ошибке времени компиляции (CS0556).
Я подумал, что могу попробовать связать неявные операторы:
public static implicit operator K(ValueType<T,K> vt){
return (K)val;
}
, но следующий пример все еще жалуется на невозможность его преобразования:
public class Test : ValueType<int, Test>
{
public override int Value{ get; set; }
}
Test t = 6; //complains it's unable to be converted
Console.WriteLine(t.Value);
Я действительно хочу избегать явного приведения, если это возможно.
Этот вопрос распространяется на еще один вопрос SO , который я поднимал ранее.