Цепочка неявных операторов в общих классах C #

Для следующего общего класса C # я бы хотел преобразовать T в K:

public abstract class ValueType : IValueType where K : ValueType,new()
{     
    public abstract T Value { get; set; }     

    public static implicit operator ValueType(T val) 
    {         
        K k = new K();
        k.Value = val;
        return k;    
    }
}

Если бы я реализовал прямой оператор неявный оператор K (T val) это приведет к ошибке времени компиляции (CS0556).

Я подумал, что могу попробовать связать неявные операторы:

public static implicit operator K(ValueType vt){
    return (K)val;
}

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

public class Test : ValueType
{
    public override int Value{ get; set; }
}

Test t = 6; //complains it's unable to be converted
Console.WriteLine(t.Value);

Я действительно хочу по возможности избегайте явного приведения типов.

Этот вопрос расширяет другой вопрос SO , который я ранее поднимал.

6
задан Community 23 May 2017 в 12:01
поделиться