我有一個擴展方法,我想重載,以便它可以處理引用類型和可爲空值類型。但是,當我嘗試這樣做時,我會得到「具有相同簽名的會員已被聲明。」 C#不能在我的泛型方法中使用where
限定符來區分它們嗎?做這項工作的一個顯而易見的方法是給每個方法一個獨特的名字,但這對我來說似乎不是一個非常優雅的解決方案。做這項工作的最佳方式是什麼?重載一種方法來支持引用類型和可爲空類型
實施例:
public static T Coalesce<T>(this SqlDataReader reader, string property) where T : class
{
return reader.IsDBNull(reader.GetOrdinal(property))
? null
: (T) reader[property];
}
public static T? Coalesce<T>(this SqlDataReader reader, string property) where T : struct
{
return reader.IsDBNull(reader.GetOrdinal(property))
? null
: (T?)reader[property];
}
// Usage
var id = reader.Coalesce<System.Guid?>("OptionalID");
完美!爲ObviousThingsIMissed團隊評分一分。 :) –
我實際上已經刪除了這篇文章,從思考轉換會導致編譯問題開始 - 但稍後才意識到,只要Item屬性類型是對象就會覆蓋它。 :○ –