Я пишу абстрактную оболочку для перечисления в C# (я хочу что-то вроде перечисления в Вала). Мой код:C# Неявный оператор с общим
public abstract class Wraper<T, TE>
where T : Wraper<T, TE>, new()
{
public TE Value;
public static implicit operator T(TE value)
{
return new T() { Value = value };
}
public static implicit operator TE(T value)
{
return value.Value;
}
}
Я хочу сделать что-то вроде этого:
public enum EFoo { A, B, C, D, E};
public class Foo : Wraper<Foo, EFoo>
{
public bool IsBla
{
get { return Value == EFoo.A || Value == EFoo.E; }
}
}
...
Foo foo = EFoo.A;
bool bla = foo.IsBla;
Но код не компилируется, потому что C# не позволяет как общий параметр ,. При компиляции выдает сообщение об ошибке:
User-defined conversion must convert to or from the enclosing type
На линии
public static implicit operator T(TE value)
Есть ли работа вокруг или в C# не так просто?
возможно дубликат [ошибки оператора явного преобразования при преобразовании общих списков] (http://stackoverflow.com/questions/1971925/explicit-conversion-operator-error-when-converting-generic-lists) – dotctor
It не имеет ничего общего с общими параметрами - проблема в том, что C# допускает только операторы преобразования от или к типу, где они определены, - в этом случае ни 'T', ни TE не являются этим типом, насколько компилятор может сказать , Вам действительно нужны эти неявные преобразования? Что делать, если вы просто указали поля enum values типа wrapping (это в значительной степени реализовано как перечисление Java)? – Luaan
Можете ли вы не использовать 'public static implicit operator Wrapper (значение TE)'? –