Существует 5 случаев использования подчеркивания в Python.
Здесь - хорошая статья с примерами mingrammer .
Обновление: Я нашел намного более изящное решение:
class MyCompositeObject
{
DateTime CreatedDate;
string SomeAttribute;
Object Obj1;
{
class MyCompositeObjects : List<MyCompositeObject> { }
Я нашел это из-за отражения, определенный тип, сохраненный в Obj1, разрешен во времени выполнения и типе, определенный DataTemplate применяется как ожидалось!
Я еще не очень знаком с WPF, но я рассматриваю это как вопрос о сортировке и фильтрации List<T>
наборы.
(необходимость скручивания жгутов вручную реализовать вид или фильтр)
Вы пересмотрели бы реализацию Вашего собственного вида или функций фильтра? По моему опыту, это просто в использовании. Примеры ниже используют анонимного делегата, но Вы могли легко определить свой собственный метод или класс для реализации сложного вида или фильтра. Такой класс мог даже иметь свойства, чтобы настроить и изменить вид и фильтр динамично.
Использовать List<T>.Sort(Comparison<T> comparison)
с Вашим пользовательским сравнивают функцию:
// Sort according to the value of SomeAttribute
List<MyCompositeObject> myList = ...;
myList.Sort(delegate(MyCompositeObject a, MyCompositeObject b)
{
// return -1 if a < b
// return 0 if a == b
// return 1 if a > b
return a.SomeAttribute.CompareTo(b.SomeAttribute);
};
Аналогичный подход для получения поднабора объектов из списка.
Использовать List<T>.FindAll(Predicate<T> match)
с Вашей пользовательской функцией фильтра:
// Select all objects where myObjectType1 and myObjectType2 are not null
myList.FindAll(delegate(MyCompositeObject a)
{
// return true to include 'a' in the sub-collection
return (a.myObjectType1 != null) && (a.myObjectType2 != null);
}
Метод "Грубой силы", который Вы упоминаете, является на самом деле идеальным решением. Обратите внимание, все объекты находятся в RAM, нет никакого узкого места ввода-вывода, таким образом, можно в значительной степени отсортировать и отфильтровать миллионы объектов в меньше, чем секунда на любом современном компьютере.
Самым изящным способом работать с наборами является Система. Пространство имен Linq в.NET 3.5
Спасибо - я также рассмотрел LINQ к объектам, но мое беспокойство, там потеря гибкости для введенных шаблонов данных, которые я должен отобразить объекты в своем списке.
Если Вы не можете предсказать в данный момент, как люди отсортируют и отфильтруют Ваш объектный набор, то необходимо посмотреть на Систему. Linq. Пространство имен выражений для создания лямбда-выражений по требованию во время времени выполнения (сначала Вы позволяете пользователю для создания выражения затем скомпилируйте, работайте, и в конце Вы используете пространство имен отражения для перечисления через результаты). Это более хитро для обертывания головы вокруг этого, но неоценимой функции, вероятно (мне окончательно) еще больше инновационной функции, чем сам LINQ.