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 关注
- 72 浏览
添加回答
举报