2008-10-20 5 views
3

Каков наилучший способ локализации коллекции (IEnumerable)? Из BL я извлекаю коллекцию объектов, которые все еще нуждаются в локализации, я решил написать метод, который расширяет IEnumerable и возвращает локализованный список.Каков наилучший способ локализовать IEnumerable?

Как я могу получить код под рабочим? Есть идеи? Может быть, лучшие варианты?

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); 
} 

ответ

2

Вы что-то пробовали, где находитесь yield?

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

это не изменит любые другие элементы в коллекции вы перечисляете над, но он будет возвращать то, что вы хотите.

+0

поправьте меня, если я ошибаюсь, но это решение не будет пересчитывать локализации каждый раз, когда вы итерацию над перечислимы? Похоже, что он хочет, это другая перечислимая коллекция, которая была локализована. – tvanfosson

+0

доходность C# s ниндзя ключевое слово ... приятно ...! – Codewerks

+0

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

1

Простое изменение, чтобы заставить его вернуть новый перечислимую коллекцию локализованных значений:

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; 
} 
Смежные вопросы