2013-06-20 3 views
1

Я хочу извлечь значение первого свойства в общий список. Первое свойство всегда Int32 (не обнуляемым)Получить значение первого свойства в общем списке

Пример списка

IEnumerable<T> items 

Значение первого свойства в каждой строке должны создать LinkedList<int>

Любые идеи, как решить эту проблему?

+1

Имеет ли первое свойство название? – dasblinkenlight

+4

Если вы все создаете сами, вы можете заставить его ожидать интерфейса, а не разрешать ... – Mr47

ответ

1

Поскольку «первое свойство» на универсального типа является то, что известно, вызвавшей метод, который преобразует items в LinkedList, вызывающий абонент может передать лямбда, который выбирает первый (второй, третий) пункт по мере необходимости, как это:

public static LinkedList<V> ToLinkedList<T,V>(
    this IEnumerable<T> items, Func<T,V> selector 
) { 
    return new LinkedList<V>(items.Select(selector)); 
} 

вы можете вызвать этот метод так:

LinkedList<int> res = items.ToLinkedList(item => item.FirstField); 

этот подход позволяет держаться подальше от модификации классы путем введения ненужных интерфейсов, а также позволяет работать с третьей стороной классов а зыбь.

+0

Привет! Благодарю. Где я могу найти «FirstField», я не знаю названия свойства. –

+0

@anpe Откуда появился класс, если вы не знаете имя первого поля? – dasblinkenlight

+0

Привет снова. Это общий T. Таким образом, имя первого свойства может измениться. Попробовали typeof (T) .GetProperties(). Сначала(), но не повезло. –

1

Попробуйте выбрать настраивали тип Methode родового элемента

public static U GetElement<U>(List<U> sourcetype) 
{ 
return (from source in sourcetype where source.GetType().GetProperties().Where(p => p.GetGetMethod().ReturnType == typeof(LinkedList<int>)).FirstOrDefault() != null select source).FirstOrDefault(); 
} 

возвращение может быть нулевым ...

С наилучшими пожеланиями.

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