我有下面的類:使用通用型「映射<T>」需要1個類型參數
public class Mapper<T> {
public static Mapper<T> GetFor<TKey>(T type) {
return new Mapper<T>();
}
public static Mapper<T> GetFor<TKey>(IEnumerable<T> types) {
return new Mapper<T>();
}
public Mapper<T> Add<TKey>(Expression<Func<T, TKey>> expression, String name) {
_fields.Add(name, expression);
return this;
}
}
我使用的是靜態方法,有時我需要創建具有匿名類型映射器實例,所以我用:
var a = new { /* ... */ }
var b = Mapper.GetFor(a);
但我得到的錯誤:
Using the generic type 'Mapper<T>' requires 1 type arguments
我也試過如下:
public class MapperFactory {
public static Mapper<T> CreateMapperFor<T>(IEnumerable<T> typeProvider) {
return new Mapper<T>();
}
}
var a = new { /* ... */ }
var b = MapperFactory.CreateMapperFor(a);
使用工廠類工作正常...
- 如何解決與第一個版本的問題?
- 我應該在Mapper中使用方法還是使用工廠?
我這樣做只是因爲我有類型是匿名的情況。
爲什麼你需要在第一個例子'TKey'? –
@YacoubMassad只是添加了缺少的Add方法,這就是我使用TKey的原因。 –
你仍然不需要'GetFor'方法中的'TKey'。 – DavidG