我有兩個類。我希望其中的一個接受兩個代表模型類型的參數,以及結果的類型。類型約束被解釋奇怪
我已經通過使用類型約束來表示TResult
必須是TModel
或IEnumerable<TModel>
。到現在爲止還挺好。現在,爲了避免每次都需要提供兩個類型參數,我想創建一個僅使用一個類型參數的第二個類,並且同時使用提供的兩個類型參數來繼承另一個類。這些類如下所示:
public class QueryBase<TResult, TModel>
where TModel : ModelBase
where TResult : TModel, IEnumerable<TModel>
{
}
public class QueryBase<TModel> : QueryBase<TModel, TModel>
where TModel : ModelBase
{
}
的問題是,當我嘗試這樣做,我得到從Visual Studio中的錯誤說以下內容:
類型「TResult」不能用作類型通用類型或方法'VTDI.Queries.QueryBase'中的參數'TResult'在 中。 沒有從'TResult'到 'TModel'的裝箱轉換或類型參數轉換。
我的問題是:這裏怎麼了?我原以爲我的類型約束可以保證轉換是可能的,但Visual Studio似乎並不同意。
'其中TResult:TModel的,IEnumerable的'這意味着'TResult'必須'TModel' **和**的'的IEnumerable '。 –
PetSerAl
@PetSerAl你是對的,在這種情況下,我想知道爲什麼類型約束本身被接受爲有效的,因爲它是矛盾的,對嗎? –
您不能將一個類型參數約束爲一個或另一個。如果你編寫了一個訪問'TModel'屬性的方法,那麼編譯器將如何知道你的類是什麼? – Blorgbeard