C#如何创建一个类似于Nullable <t> </t>的类

时间:2013-04-04 17:55:21

标签: c# class type-conversion implicit-conversion conversion-operator

鉴于代码:

public class Filter<T>
{
    private bool selected = false;
    public bool Selected { get { return selected; } }

    private T value;
    public T Value { get{ return this.value; } set { this.value = value; selected = true; }
}     

public class Test
{
    public void filter()
    {
        DateTime a= new DateTime();
        Nullable<DateTime> b = new DateTime(); //Work Like a Charm
        Filter<DateTime> c = new DateTime(); //Dosent Work
    }
}

Nullable<T>中,new DateTime()可以直接分配到变量中。在我的班上,它不起作用。我想了解我所缺少的东西。

我认为这很简单。但我无法用言语来找到答案。

2 个答案:

答案 0 :(得分:8)

您必须实施implicit operators

public static implicit operator Filter<T>(T value)
{
    return new Filter<T>() { Value = value };
}

隐式运算符允许您在不显式编写Filter<T> filter = (Filter<T>)value;(显式强制转换)的情况下强制转换类型,而只是Filter<T> filter = value;(隐式强制转换)。

答案 1 :(得分:3)

您需要使用隐式转换运算符:

请参阅:Implicit cast operator and the equality operator

这允许您编写代码以从另一种类型构建自定义类型。