1 回答

TA貢獻1798條經驗 獲得超3個贊
通常,對于單個通用約束列表,您只能顯式提供所有參數或自動解析所有參數。您不能部分提供約束。
所以你的選擇如下(我假設TWrapper
會有一個屬性WrappedObject
):
按原樣提供所有參數
減少泛型參數的數量(如果密鑰類型始終相同,您甚至可以將其設置為非泛型)
// signature
Dictionary<TKey, TWrapper> ToDictionaryWrapper<TWrapper, TKey>(
this IEnumerable<BaseModel> source,
Func<BaseModel, TKey> keySelector)
where TWrapper : IBaseWrapper;
// call
model.ObjectAttributes
.ToDictionaryWrapper<ObjectAttributeWrapper, string>(oa => oa.Attribute.Name);
將函數調用分為兩部分,一部分是顯式的,另一部分是隱式的
// signature
IEnumerable<TWrapper> Wrap<TWrapper>(this IEnumerable<BaseModel> source)
where TWrapper : IBaseWrapper;
Dictionary<TKey, TWrapper> ToDictionaryWrapper<TWrapper, TKey>(
this IEnumerable<TWrapper> source,
Func<BaseModel, TKey> keySelector)
where TWrapper : IBaseWrapper;
// call
model.ObjectAttributes
.Wrap<ObjectAttributeWrapper>()
.ToDictionaryWrapper(oa => oa.Attribute.Name);
不用擔心自定義ToDictionaryWrapper,只需使用 Wrap-Function 和 FrameworkToDictionary
// call (signature for Wrap same as above)
model.ObjectAttributes
.Wrap<ObjectAttributeWrapper>()
.ToDictionary(w => w.WrappedObject.Attribute.Name);
- 1 回答
- 0 關注
- 111 瀏覽
添加回答
舉報