簡體   English   中英

通用包裝器類的隱式C#轉換

[英]Implicit C# Conversion For Generic Wrapper Class

我正在編寫一個通用包裝器類,以便為我的另一個類中的一堆屬性實現INotifyPropertyChanged 我一直在對implicit轉換運算符進行一些研究,但對於如何在泛型類中使用它感到有些困惑。 本質上,我想獲取內部包裝的值,而無需顯式調用內部屬性。 我要尋找的行為本質上是Nullable<T>類/結構的工作方式,如果內部值不為null ,它將直接返回內部包裝的值。 下面的例子:

//current behavior
MyWrapperClass<int> wrapped = new MyWrapperClass();
int startCount = wrapped.Data;

//behavior I am looking to implement
int startCount = wrapped

在上面的第二個示例中,wrapped將返回其內部包裹的值,而不是類型T,而不必調用inner屬性。 這就是Nullable<T>行為。

在研究隱式轉換時,似乎需要根據此MSDN文章事先了解類型: 使用轉換運算符

由於類型未知,是否需要轉換為dynamic類型? 例:

public static implicit operator dynamic(MyWrapperClass w)

還是可以按如下所示對T類型執行隱式轉換? 這將使我無法使該方法成為靜態方法,我注意到該方法已在我看到的所有涉及隱式和顯式轉換運算符的示例代碼中使用。 對我來說,此選項似乎是“錯誤的”,但是我在這里找不到關於此主題的太多信息。

public implicit operator T(MyWrapperClass w)

編輯:此問題可能會導致該標簽被標記為重復,但可接受的答案不是我想要的,因為他們說要使用我已經在做的屬性。

經過一些測試,似乎第二個選項可以正常工作,並且仍然允許它是靜態的。 我使用@AndersForsgren對這個問題的答案(不被接受的答案)來解決這個問題 顯然我誤解了隱式運算符重載的工作方式。 糾正此問題的代碼段如下:

public static implicit operator T(WrapperClass<T> input)
{
     return input.Data;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM