2008-10-20 6 views
3

Quelle est la meilleure façon de localiser une collection (IEnumerable)? Depuis le BL je récupère une collection d'entités qui ont encore besoin de localiser, je me suis dit que j'écris une méthode qui étend le IEnumerable et retourne la liste localisée.Quelle est la meilleure façon de localiser un IEnumerable?

Comment puis-je obtenir le code en fonctionnement? Des idées? Peut-être de meilleures options?

public static IEnumerable Localize(this IEnumerable items, CultureInfo cultureInfo) 
{ 
    foreach(string item in items) 
    { 
     /*Error underneath, cannot assign to item*/ 
     item = ResourceHelper.GetString(item, cultureInfo); 
    } 
    return (items); 
} 

Répondre

2

Avez-vous essayé quelque chose où yield l'article?

public static IEnumerable<string> Localize(this IEnumerable<string> items, CultureInfo culture) 
{ 
    foreach (string item in items) 
    { 
     yield return ResourceHelper.GetString(item,culture); 
    } 
} 

cela ne changera tout autre les éléments de la collection que vous énumérez sur, mais il retournera ce que vous voulez.

+0

-moi si je me trompe, mais ne cette solution recalcule la localisation chaque fois que vous itérer à travers dénombrable? On dirait qu'il veut une autre collection énumérable qui a été localisée. – tvanfosson

+0

le rendement est C# s mot-clé Ninja ... agréable ...! – Codewerks

+0

http://www.lnbogen.com/2008/10/18/TheBeautyOfYieldStatement.aspx – Codewerks

1

changement simple pour l'obtenir pour retourner une nouvelle collection dénombrable de valeurs localisées:

public static IEnumerable<string> Localize(this IEnumerable<string> items, CultureInfo cultureInfo) 
{ 
    List<string> newItems = new List<string>(); 
    foreach(string item in items) 
    { 
     newItems.Add(ResourceHelper.GetString(item, cultureInfo)); 
    } 
    return newItems; 
} 
Questions connexes