2009-05-06 4 views
0

sagen, ich habe eine Reihe von User bekam:Typecast jedes Objekt in einem Array auf einer einzigen Codezeile, mit LINQ

class User : IUserDowngraded 
{ 
    public Int32 Id { get; set; } 
} 

... mit heruntergestuft Funktionalität erfolgt durch die Objekte auf eine bestimmte Schnittstelle Gießen :

interface IUserDowngraded 
{ 
    Int32 Id { get; } // removes set functionality from property 
} 

... wie ich diese Herabstufung Objekte werfen würde (IUserDowngraded) zu User Objekten in einer einzigen Code-Zeile, mit LINQ?


Was ich versuche, dies zu vermeiden:

// pseudo-code alert: 
IUserDowngraded[] downgradedUsers { IUserDowngraded, IUserDowngraded, ... }; 

var upgradedUsers = new User[downgradedUsers.Count()]; 

Int32 i = 0; 

foreach (IUserDowngraded du in downgradedUsers) 
{ 
    upgradedUsers[i] = (User)user; 

    i++; 
} 

Antwort

2
var upgradedUsers = downgradedUsers.Cast<User>(); 

einen Anruf Anhängen an ToArray() wenn Sie upgradedUsers als Array wollen, natürlich.

+0

Ich denke, ich habe diese Methode vermisst. Danke :) – roosteronacid

+0

Ja, LINQ hat viele Leckereien, die leicht zu übersehen sind ... Dies ist ein besonders nützliches. :) – Noldorin

Verwandte Themen