Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Сортируем линком? (тяпничное)

673  1 2 все
Murr патриот13.12.19 12:43
Murr
NEW 13.12.19 12:43 

Сортируем линком? (тяпничное)


Дано:

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 - константа.

Но доступ к клиентам отрабатывает однозначно - в нем проблем нет...


#1 
NightWatch коренной житель13.12.19 16:24
NightWatch
13.12.19 16:24 
в ответ Murr 13.12.19 12:43
Каким будет результат?

Отсортированный список.

Каким будет результат без последнего ToList<TClientHost>();?

Ошибка компиляции.

TClientHost не содержит ID, а хранит только ссылку на клиента, у которого ID - константа.

Если ID - константа (что само по себе странно), то смысла в сортировке по ID - ноль.

#2 
Murr патриот13.12.19 20:40
Murr
NEW 13.12.19 20:40 
в ответ NightWatch 13.12.19 16:24

Отсортированный список.

-----

Я на него надеялся, но не получил. безум



Ошибка компиляции.

------

Формально - да.

Но в вопросе Я подразумевал - какого типа и содержания будет результат.


смысла в сортировке по ID - ноль.

-----

??? - мне показалось полезным дать список именно по возрастанию.

Бо, без сортировки у меня получается в "порядке загрузки плугинов", который в свою очередь зависит от порядка загрузки ддлок, который определяется порядком записей об дллках в файловой системе. Ну а поскольку из элементов списка лепятся пунктики меню - краАайне желательно чтобы элементы оставались на местах, а не бегали туда-сюда в зависимости от порядка копирования файлов по ClickOnce... смущ

#3 
Срыв покровов коренной житель13.12.19 22:34
NEW 13.12.19 22:34 
в ответ Murr 13.12.19 20:40

Мурр опять чего-то намудрил, а виноват во всем билли.

#4 
AlexNek патриот14.12.19 13:40
AlexNek
NEW 14.12.19 13:40 
в ответ Murr 13.12.19 20:40

Id у тебя проперти или ...?

#5 
Срыв покровов коренной житель14.12.19 13:55
NEW 14.12.19 13:55 
в ответ AlexNek 14.12.19 13:40

а что это меняет?

#6 
AlexNek патриот14.12.19 14:12
AlexNek
NEW 14.12.19 14:12 
в ответ Срыв покровов 14.12.19 13:55

Многое. Один класс дает константу 5, другой 2 и т.п.

#7 
Срыв покровов коренной житель14.12.19 14:39
NEW 14.12.19 14:39 
в ответ AlexNek 14.12.19 14:12

Какой другой класс? Он там всего один.

#8 
Murr патриот14.12.19 18:05
Murr
NEW 14.12.19 18:05 
в ответ AlexNek 14.12.19 13:40

Id у тебя проперти или ...?

-----

Client - interface IClient

ID - проперть интерфейса. Имплементация - в конкретном клиенте - там константа.

#9 
AlexNek патриот14.12.19 18:11
AlexNek
NEW 14.12.19 18:11 
в ответ Murr 14.12.19 18:05

Ну нормально тогда, значит проблема где то еще

TClientHostProvider - а это что за странное имя переменной? У меня так генерик классы называются смущ

#10 
Murr патриот14.12.19 18:12
Murr
NEW 14.12.19 18:12 
в ответ Срыв покровов 14.12.19 14:39

Он там всего один.

-----

Ну Я бы все же задумался над тем, что из одного "класса с константой" зачем-то формируется список, который затем еще и сортируется... безум

#11 
Murr патриот14.12.19 18:23
Murr
NEW 14.12.19 18:23 
в ответ AlexNek 14.12.19 18:11

это что за странное имя переменной

------

Какое было в исходном варианте - почти такое и оставил - провайдет хост-классов (прокси) для Клиентов.

И оно почти генерик - ему без разницы какие плугины хостить...


значит проблема где то еще

------

Именно... но реальная проблема в том, что там больше ничего нету:

Есть синглетон TClientHostProvider

и у него одна статическая проперть List<TClientHost> Clients.

Внутри получается единичный инстнсе списка, который Я сортирую линком...

... и получаю не до конца сортированным...

Единственное - клиенты. Каждый в своей дллке и загружаются мануально...

Но загружаются же... но вот со списком загруженных - проблема - не сортируется...

#12 
AlexNek патриот14.12.19 18:36
AlexNek
NEW 14.12.19 18:36 
в ответ Murr 14.12.19 18:23

А отсортировать копию списка не пробовал? И не "линком"?

#13 
Murr патриот14.12.19 18:51
Murr
NEW 14.12.19 18:51 
в ответ AlexNek 14.12.19 18:36

А отсортировать копию списка не пробовал? И не "линком"?

------

Да ты шо? Рази ж ТАК можно? смущ


Ну могу Я сформировать список любым способом.

Самое примитивное - простой вставкой - за один проход.

Но вопрос-то не в этом - это никак не повлияет на неработоспособность указанной выше конструкции... и оно может не работать где-то еще... особливо проблемно - непонятно какие условия создают неработоспособность - можно что-то меленькое поменять и получить непонятно как вылезший из ниоткуда геморой в неудобном месте...

#14 
AlexNek патриот14.12.19 18:56
AlexNek
NEW 14.12.19 18:56 
в ответ Murr 14.12.19 18:51
Рази ж ТАК можно?

А кто сказал что это для продакшион?

Нужно ведь как-то причину найти вначале.

#15 
Murr патриот14.12.19 19:05
Murr
NEW 14.12.19 19:05 
в ответ AlexNek 14.12.19 18:56

А кто сказал что это для продакшион?

-----

А вот как раз для продакшен Я могу это сделать. Там в одном месте дописать цикл.

Просто у меня клиенты не требовательные - не жалуются на смену порядка пунктов меню.

Это Я сам заметил что они слегка перемещаются и попробовал "убить" проблему.

А в результате - получился тяпничный пост...


Нужно ведь как-то причину найти

-----

Именно.

Но не вижу где вообще она может быть - лист есть лист - сортировка линкоm должна работать.


#16 
AlexNek патриот14.12.19 19:23
AlexNek
NEW 14.12.19 19:23 
в ответ Murr 14.12.19 19:05
      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();
        }

Ну ищи где я не так сделал как у тебя смущ

#17 
Murr патриот14.12.19 23:23
Murr
NEW 14.12.19 23:23 
в ответ AlexNek 14.12.19 19:23

У меня дома нет работающего железа - все передохло.


Сделано (у меня) немного не так. Ближе всего будет так:


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

ехтернал - во внешней дллке-плугине.


Поясню почему так.

Инстансы клиентов довольно "тяжелые", а хосты - относительно легкие и можно создать на без инстанса клиента, чисто на аттрибутах из метаданных.

По-этому все манипуляции идут с хостами, а клиенты, в принципе, могут загружаться только когда нужны.

Хотя - у меня клиенты не слишком тяжелые - гружу сразу, хотя мне нужен всего один за раз.

Полный код провайдера Я как-то уже кидал.

#18 
Срыв покровов коренной житель15.12.19 00:49
NEW 15.12.19 00:49 
в ответ Murr 14.12.19 23:23
Murr патриот15.12.19 11:18
Murr
NEW 15.12.19 11:18 
в ответ Срыв покровов 15.12.19 00:49

Да! Но тема сисеГ не раскрыта...


Ну какая разница КАК получена жопа, когда по факту жопа в НАЛИЧИИ? хаха

#20 
1 2 все