我聲明爲這樣一類:我可以創建自定義暗示類型演員嗎?
public abstract class CrmAttribute <T> : ICrmAttribute
{
}
而在所述方法的一個進一步向下我有此
castedValue = (T)value;
castedValue
然後在作爲參數T
類型的其他方法中使用。
我的問題是已經出現這樣的情況,以上投拋出InvalidCastException
。
從我可以告訴這是一個具體的情況;在Dynamics 2011中,微軟終於擺脫了類似CRMNumber
這樣的自定義類型,並且轉向了固有的.Net類型,但並非所有情況。剩下的那些,是一個複雜的Money
類型,它有一個屬性.Value
,它包含一個小數。這是我的異常拋出的地方,因爲我不能將小數轉換爲Money類型。儘管Money
對象本質上是Decimal
。
我對泛型還是比較新的,大部分都是遺傳代碼,所以我很清楚正確的響應是不是這樣做,但我所要做的就是能夠創建我自己暗示的Money
轉換爲Decimal
,以便使用T
的行將正確投射。
這可能嗎?
我做了這樣的事情,但它不會在行上編譯'if(T是Money)'錯誤是'T'是'類型參數',但像'變量'一樣使用,我不'確定如何循環瀏覽,因爲我仍然在泛泛而談自己。 – Chris
'T'是一個類型參數,所以你不能像'is'那樣在它上面使用一個實例操作符。出於同樣的原因,你不能寫'DateTime是對象' - 它沒有任何意義。比較兩種類型的方法是使用代表它們的'Type'類。您可以通過使用'typeof(T)'或'myInstanceOfT.GetType()'來實現'Type'類的實例。前者用於編譯時已知類型(例如泛型),後者用於運行時已知類型。所以只需使用'if(typeof(T)== typeof(Money))'。 –
@AllonGuralnek小心:如果'Money'被解除密封,並且該對象可能是派生類的實例,則測試類型相等性將不起作用。 – phoog