2010-08-22 5 views
2

У меня есть класс бизнес-объекта BusinessObject, который реализует интерфейс IAlternateInterface. У меня уже есть метод, который будет возвращать общий список BusinessObject, у которого есть объекты, которые я хочу, но я хочу получить их как список IAlternateInterface. Я попытался сделать что-то вроде следующего кода psudo, но я получаю сообщение «Невозможно преобразовать исходный тип ... в тип цели ...» в Visual Studio. Каков наилучший способ конвертировать список?C# список преобразование в asp.net

public List<BusinessObject> GetObjects(){ 
//logic to get the list 
} 

public List<IAlternateInterface> GetInterfaceObjects(){ 
return GetObjects(); 
} 

ответ

2

Вы ищете Enumerable.Cast<TResult>:

GetObjects().Cast<IAlternateInterface>.ToList(); 

ToList в конце необходимо только, если вам нужен список. В ролях <TResult> возвращает IEnumerable <TResult>

+0

Я бросил код в своем проекте, очень быстро, и этот c потому что я уверен, что это сработает. Я поиграю с ним в понедельник, чтобы убедиться, но я уверен, что это сделает то, что мне нужно. Спасибо и другим людям, которые ответили. – William

0

С помощью LINQ Cast

public List<IAlternateInterface> GetInterfaceObjects(){ 
return GetObjects().Cast<IAlternateInterface>().ToList(); 
} 
2

этих двух ответов с использованием Cast хороши для C# 3 и C# 4 ... но если вы используете C# 4 (и .NET 4), вы можете также использовать общую дисперсию, чтобы избежать одного шага:

public List<IAlternateInterface> GetInterfaceObjects(){ 
    return GetObjects().ToList<IAlternateInterface>(); 
} 
+0

OP получает «Невозможно преобразовать тип источника в тип цели», поэтому может быть не C# 4. Но в этом случае не будет возвращать GetObjects(); – Kobi

+0

@Kobi: Нет, потому что 'List ' инвариантен. Вам все равно нужно создать «List », который будет выполнять вызов ToList', но он будет использовать неявное преобразование «List ' to 'IEnumerable ", которое теперь доступно. –

+0

О, конечно! Поэтому, возможно, чистым решением является возвращение 'IEnumerable ', но это зависит от того, что требуется OP ... Спасибо. – Kobi

Смежные вопросы