1

由于代码的类:C#如何使这一行为类似于可空<T>

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

我觉得这很简单。但我无法用言语来寻找答案。

+0

可空''是在CLR和特殊处理的.NET语言的编译器的特殊情况下,你有找到相同的语义问题的 – 2013-04-04 17:57:27

+0

部分是可为空''是'struct' ,而不是“课堂”。 – 48klocs 2013-04-04 18:07:36

+0

@ShaniElharrar他的问题根本不是特例,因为它只是隐式转换。 – pascalhein 2013-04-04 18:09:53

回答

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

@Clint在OP代码中没有定义构造函数,所以'返回新的过滤器(value); '不会编译,因为只有不带参数的构造函数才可以访问。 – pascalhein 2013-04-04 18:03:45

+0

谢谢!它帮助 – Higarian 2013-04-04 18:11:59