C # Ковариационная проблема - PullRequest
1 голос
/ 03 февраля 2010

У меня была сгенерированная сущность домена linq-to-sql, которую я привел к правильному интерфейсу, вот так:

public IEnumerable<IApplication> GetApplications()
    {
        using (var dc = new LqDev202DataContext())
        {
            return dc.ZApplications.Cast<IApplication>().ToList();
        }
    }

Однако я переименовал таблицу linq-to-sql, не касаясь моего частичного класса, и код все еще скомпилирован.

В списке было правильное количество элементов, но все они были нулевыми.

Нужно ли мне писать вспомогательный метод, чтобы убедиться, что он будет работать, или есть безопасный встроенный способ компиляции во время компиляции в .net 3.5?

1 Ответ

0 голосов
/ 21 октября 2010

Вы также можете использовать это для приведения с преобразованием, если необходимо:

public static IEnumerable<TDest> CastAll<TItem, TDest>(this IEnumerable<TItem> items)
{
 var p = Expression.Parameter(typeof(TItem), "i");
 var c = Expression.Convert(p, typeof(TDest));
 var ex = Expression.Lambda<Func<TItem, TDest>>(c, p).Compile();

 foreach (var item in items)
 {
    yield return ex(item);
 }
}

С http://adventuresdotnet.blogspot.com/2010/06/better-more-type-safe-alternative-to.html

...