Сортируем линком? (тяпничное)
Сортируем линком? (тяпничное)
Дано:
List<TClientHost> hosts = TClientHostProvider.Clients.OrderBy(x => x.Client.ID).ToList<TClientHost>();
где:
TClientHostProvider.Clients is List<TClientHost>x.Client.ID is Int32
Каким будет результат?
Каким будет результат без последнего ToList<TClientHost>();?
Для полной запутанности - TClientHost не содержит ID, а хранит только ссылку на клиента, у которого ID - константа.
Но доступ к клиентам отрабатывает однозначно - в нем проблем нет...
Каким будет результат?
Отсортированный список.
Каким будет результат без последнего ToList<TClientHost>();?
Ошибка компиляции.
TClientHost не содержит ID, а хранит только ссылку на клиента, у которого ID - константа.
Если ID - константа (что само по себе странно), то смысла в сортировке по ID - ноль.
Отсортированный список.
-----
Я на него надеялся, но не получил.
Ошибка компиляции.
------
Формально - да.
Но в вопросе Я подразумевал - какого типа и содержания будет результат.
смысла в сортировке по ID - ноль.
-----
??? - мне показалось полезным дать список именно по возрастанию.
Бо, без сортировки у меня получается в "порядке загрузки плугинов", который в свою очередь зависит от порядка загрузки ддлок, который определяется порядком записей об дллках в файловой системе. Ну а поскольку из элементов списка лепятся пунктики меню - краАайне желательно чтобы элементы оставались на местах, а не бегали туда-сюда в зависимости от порядка копирования файлов по ClickOnce...
это что за странное имя переменной
------
Какое было в исходном варианте - почти такое и оставил - провайдет хост-классов (прокси) для Клиентов.
И оно почти генерик - ему без разницы какие плугины хостить...
значит проблема где то еще
------
Именно... но реальная проблема в том, что там больше ничего нету:
Есть синглетон TClientHostProvider
и у него одна статическая проперть List<TClientHost> Clients.
Внутри получается единичный инстнсе списка, который Я сортирую линком...
... и получаю не до конца сортированным...
Единственное - клиенты. Каждый в своей дллке и загружаются мануально...
Но загружаются же... но вот со списком загруженных - проблема - не сортируется...
А отсортировать копию списка не пробовал? И не "линком"?
------
Да ты шо? Рази ж ТАК можно?
Ну могу Я сформировать список любым способом.
Самое примитивное - простой вставкой - за один проход.
Но вопрос-то не в этом - это никак не повлияет на неработоспособность указанной выше конструкции... и оно может не работать где-то еще... особливо проблемно - непонятно какие условия создают неработоспособность - можно что-то меленькое поменять и получить непонятно как вылезший из ниоткуда геморой в неудобном месте...
А кто сказал что это для продакшион?
-----
А вот как раз для продакшен Я могу это сделать. Там в одном месте дописать цикл.
Просто у меня клиенты не требовательные - не жалуются на смену порядка пунктов меню.
Это Я сам заметил что они слегка перемещаются и попробовал "убить" проблему.
А в результате - получился тяпничный пост...
Нужно ведь как-то причину найти
-----
Именно.
Но не вижу где вообще она может быть - лист есть лист - сортировка линкоm должна работать.
private static void Main(string[] args) { var test = new TClientHostProvider(); List<TClientHost> hosts = TClientHostProvider.Clients.OrderBy(x => x.Client.Id).ToList(); foreach (TClientHost clientHost in hosts) { Console.WriteLine("{0}.{1}",clientHost.Id,clientHost.Name); } Console.ReadKey(); }
Ну ищи где я не так сделал как у тебя
У меня дома нет работающего железа - все передохло.
Сделано (у меня) немного не так. Ближе всего будет так:
public interface IClient{int Id { get; }string Name { get; }}
internal class TClientHost : IClient{IClient client;TClientHost(TClientBase pClientBase){client = pClientBase;}
int IClient.Id { get { return client.Id; }string IClient.Name { get { return client.Name; }}
internal class TClientBase : IClient{int id;string name;
public TClientBase(int pId, string pName){id = pId;name = pName;}
int IClient.Id { get { return id; }string IClient.Name { get { return name; }}
external class ClientTest01 : TClientBase{public ClientTest01 : base(1, "Test01)";}
ехтернал - во внешней дллке-плугине.
Поясню почему так.
Инстансы клиентов довольно "тяжелые", а хосты - относительно легкие и можно создать на без инстанса клиента, чисто на аттрибутах из метаданных.
По-этому все манипуляции идут с хостами, а клиенты, в принципе, могут загружаться только когда нужны.
Хотя - у меня клиенты не слишком тяжелые - гружу сразу, хотя мне нужен всего один за раз.
Полный код провайдера Я как-то уже кидал.