我試圖在列表中緩存一些類。鑄造到通用版本的類在InvalidCastException中結束
因爲這個類有一個通用的屬性,我創建了一個非泛型的類,這是該列表的類型。
所以我的BO是這樣的:
public class Model<T> : Model where T : class
{
public T Cls
{
get { return (T) ClsObject; }
set { ClsObject = value; }
}
}
public class Model
{
public List<ModelProperty> Properties { get; set; }
public string ModelName { get; set; }
public Type ClsType { get; set; }
public object ClsObject { get; set; }
}
因此,這裏的高速緩存級:
private static List<Model> CachedModels {get; set;}
public static Model<T> GetCachedVersion<T>(this T cls) where T : class
{
var ret = CachedModels.FirstOrDefault(x => x.ClsType == typeof(T));
return ret != null ? (Model<T>)ret : null;
}
但是從GetCachedVersion法崩潰鑄造,我不明白爲什麼。
感謝您的任何提示!
沒有什麼表示,每一個'Model'了''的T' ClsType'實際上是一個'模式'。我們不知道你是如何創建模型的......而且,'ClsType'甚至可以設置。有多種原因可能是錯誤的。 –
「ret」的實際(運行時)類型是什麼? –
感謝Jon的提示。我從模型中提取了一個接口,所以現在我的BO是Model:IModel和Model:IModel。仍然沒有工作... 和托馬斯:也謝謝。 ret是Model 的型號 - 該代碼部分工作正常。 –
Richard