C#隐式运算符与通用 [英] C# Implicit operator with generic
本文介绍了C#隐式运算符与通用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在为C#中的enum编写一个抽象包装器(我想要类似于Vala中的枚举)。我的代码是:
public abstract class Wraper< T,TE>
其中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;
code $
$ b我想要这样做: p>
public enum EFoo {A,B,C,D,E};
public class Foo:Wraper< Foo,EFoo>
{
public bool IsBla
{
get {return Value == EFoo.A ||值== EFoo.E; }
}
}
...
Foo foo = EFoo.A;
bool bla = foo.IsBla;
但是代码不能编译,因为C#不允许两个泛型参数。当编译报告错误时:
用户定义的转换必须转换为或来自封闭类型
$ c
$ b $ p $在线上
$ pre $ code> public static implicit运算符T(TE值)
是否有任何解决方法或在C#中不是那么简单? p>
解决方案您无法对泛型类型使用隐式。
I'm writing an abstract wrapper for enum in C # (I want something like enum in Vala). My code is:
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;
}
}
I want to do with something like this:
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;
But the code does not compile because C # does not allow both generic parameter,. When compile reports an error:
User-defined conversion must convert to or from the enclosing type
On line
public static implicit operator T(TE value)
Is there any work around or in C# is not so simple?
解决方案 You can't use implicit for Generic Types.
这篇关于C#隐式运算符与通用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文