1

给定代码:

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()可以直接赋值给变量。在我的课堂上,它不起作用。我想了解我错过了什么。

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

4

2 回答 2

8

您必须实现隐式运算符

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

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

于 2013-04-04T17:57:30.520 回答
3

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

请参阅:隐式强制转换运算符和相等运算符

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

于 2013-04-04T17:56:59.030 回答