【发布时间】:2015-12-07 18:12:56
【问题描述】:
我正在为 C# 中的 enum 编写一个抽象包装器(我想要 Vala 中的 enum 之类的东西)。我的代码是:
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# 中没有那么简单?
【问题讨论】:
-
它与泛型参数无关 - 问题是 C# 只允许从或到它们定义的类型的转换运算符 - 在这种情况下,
T和TE都不是类型,据编译器所知。你真的需要那些隐式转换吗?如果您只是简单地制作包装类型的枚举值字段(Java 的枚举几乎就是这样实现的)怎么办? -
不能用
public static implicit operator Wrapper<T, TE>(TE value)吗?
标签: c# generics implicit-conversion