C#隐式运算符与通用 [英] C# Implicit operator with generic

查看:147
本文介绍了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#不允许两个泛型参数。当编译报告错误时:

 用户定义的转换必须转换为或来自封闭类型


$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆