と一般的なマッピングを作成するには?どのように私はマップの構成を有しているAutoMapperとConstructUsing
TタイプはIDictionary<int, T>
からList<T>
に変換したいと思います。
私は非常に醜い解決策が見つかりました:これを行うには任意の簡単な方法があります
static IEnumerable<DictionaryEntry> CastDictionaryEntry(IEnumerable dict)
{
foreach (var item in dict)
{
yield return (DictionaryEntry)item;
}
}
:
cfg.CreateMap(typeof(IDictionary<,>), typeof(List<>)).ConstructUsing(
x0 =>
{
if (x0 == null)
{
return null;
}
var dict = (IEnumerable)x0;
var type = x0.GetType().GetGenericArguments()[1];
var list = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(type));
CastDictionaryEntry(dict).OrderBy(x => x.Key).ForEach(x => list.Add(x.Value));
return list;
}
);
とは?
の幅広いセットに対してテストしていませんか? –
私は結果リストのキーでdict.Valuesをソートします。 {1、 "a"}、{3、 "b"}、{2、 "c"}の場合、結果は{"a"、 "c"、b} 。 2番目の問題は、IEnumerableにValuesプロパティがないことです。 IDictionaryのValuesプロパティにアクセスするにはどうすればよいですか? –
zgabi
辞書(Dictionary)オブジェクトがIDictionary(例えばNHibernateのPersistentGenericMap)でないため、IDictionary(非汎用)にキャストできません – zgabi