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