Этого треда уже нет.
Это копия, сохраненная 30 января 2017 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
16 Кб, 260x321
.NET THREAD #5 (C#/F#/VB) #887100 В конец треда | Веб
ред единственной элитной платформы в мире программирования.

Шапка: https://github.com/CSharpShapka/SharpHat/wiki

(пока просто перенесена шапка из ОП-поста, в ближайшее время приведу к более-менее адекватному виду, не стесняйтесь слать свои пулл-реквесты)

Прошлый тред тонет здесь: https://2ch.hk/pr/res/869105.html (М)
#2 #887105
И сразу вопрос: каковы шансы при устройстве на работу джуном попасть на новый проект, а не на поддержку тысячелетнего говна?
887199888534
#3 #887199
>>887105
перед собесом спрашиваешь: куда и на что тебя собеседуют. ну а дальше 60/40, что наебут
#4 #887209
Сап, дотнетач. Понадобилось мне тут обработать ~10000 картинок, решил написать одноразовую программулину на C#.
Делаю все как обычно, последовательно по одной картинке за раз (распараллелить тут нельзя, ибо манипуляции с каждой следующей картинкой зависят от предыдущей + рандом):

Width = bitmap.Width;
Height = bitmap.Height;
Bits = BitmapToByteArray(bitmap);
BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned);
Bitmap = new Bitmap(Width, Height, Width * 4, PixelFormat.Format32bppArgb, BitsHandle.AddrOfPinnedObject());

Далее произвожу нужные мне манипуляции с Bits, делаю Bitmap.Save, и после сохранения освобождаю GCHandle и все ресурсы.
Но возникает проблема - программа правильно обрабатывает и сохраняет примерно первые 3-5 тысяч картинок, и после этого на рандомной картинке на Bitmap.Save выдает мне "AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена". Все картинки имеют одинаковые параметры (размер, формат, битность).

Аноны, подскажите, куда копать? В каком месте память повреждается? И как она вообще может повредиться, если я выполняю все последовательно, и освобождаю все ресурсы строго после того, как они перестают использоваться? Тем более, все это делается даже без unsafe.
887254888242
#5 #887254
>>887209
действительно ли тебе тут нужен gchandle, или проще воспользоваться блоком using для bitmap?

выполняешь ли ты все дела с картинкой в unsafe блоке?
887268888242
#6 #887268
>>887254
Вот этого удвою. Если уж совсем параноик, можешь явно прописать на Bitmap'е диспоуз.
888242
#7 #887274
Здравствуйте дамы и господа!

Прямо с детства мечтал стать ниибаца кодером, как-то с годами забыл, но вот недавно пыл вернулся, на этот раз цель себе поставил четко. Свободного времени в день 2-3 часа +/-. Хочу это время полностью посвящать шарпу.
Интересует разработка софта для соц.сетей, всякие боты и т.д., многопоточность, брут, ну и прочая хуйня.
Знаний самую малость, но не полный 0.
Так вот, очень прошу вас дать мне дельные видео уроки, книжки и т.д., дабы я их полностью переварил и начал потихоньку сам, свободно кодить, без копи-пасты чужих кодов.
Алсо, пытался смотреть ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня сильно поимели мой мозг.

Коротко говоря, нужны годные видео уроки и книжки, где доступным языком научат потихоньку самостоятельному кодингу.
Заранее благодарен тебе анон!
#8 #887276
>>887100 (OP)
Здравствуйте дамы и господа!

Прямо с детства мечтал стать ниибаца кодером, как-то с годами забыл, но вот недавно пыл вернулся, на этот раз цель себе поставил четко. Свободного времени в день 2-3 часа +/-. Хочу это время полностью посвящать шарпу.
Интересует разработка софта для соц.сетей, всякие боты и т.д., многопоточность, брут, ну и прочая хуйня, короче, вполную использовать API и т.д.
Знаний самую малость, но не полный 0.
Так вот, очень прошу вас дать мне дельные видео уроки, книжки и т.д., дабы я их полностью переварил и начал потихоньку сам, свободно кодить, без копи-пасты чужих кодов.
Алсо, пытался смотреть ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня сильно поимели мой мозг.

Коротко говоря, нужны годные видео уроки и книжки, где доступным языком научат потихоньку самостоятельному кодингу.
888661
#9 #887277
>>887274

>очень прошу вас дать


Нахуй проследуй. Если не в состоянии найти сам - в айти тебе не место.
887279887337888535
#10 #887279
>>887274

> видео уроки


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

> книжки


На русском всё устаревшее, на английском годная литература в основном только за бабло.

Всё это хуйня, ты так ничему не научишься. Просто ставишь себе задачу "написать такое-то приложение", гугл в зубы - и вперёд, по пути всему, что потребуется, научишься.
И да, вот этот >>887277 господин полностью прав - либо учишься искать нужную инфу сам, либо нахуй путешествуй отсюда.
887323887337888539
#11 #887323
>>887279
Двачую. Я сам начинал с C/C++. Си учил по Ричи, а кресты по Страусу. Плюс гуглил если что-то не понятно. Дальше все языки без книг учу и видео. Там слишком для начинающих объясняют. Не хочу каждый раз проходить переменные снова. Лучше так как ты сказал, Google+MSDN+SO и пилишь проект.
887337
#12 #887337
>>887277
>>887279
>>887323
Благодарствую господа.
Так и быть, откину нахуй все книжки и видео уроки и сяду тупо пилить софт путем поиска в гагле.

Назрел такой вопрос:
На каком уровне знаний лучше лезть в API? Там дохуя сложно или как? Тут наверное есть те, кто работал с API.
887389887463
27 Кб, 895x207
#13 #887389
>>887337
Это просто пиздецки сложно. На пике все слова, которые тебе нужно гуглить.
#14 #887409
Для каких реальных кейсов используется dynamic? У меня такое ощущение, что он нужен только для того, чтобы любители динамикодрисни а-ля JavaScript чувствовали себя как дома, кладя хуй на всю систему типов.
887425887468
#15 #887425
>>887409
для совместимости с языками программирования без статической типизации. ну либо в случае, когда структура объекта может быть настолько разной, что аж плохо становится
#16 #887463
>>887337
Если умеешь в Си, начни с албахари. Идёт как справочник по возможностям языка и потом юзкейсы. Мне после контроллеров заходит самое оно.
#17 #887468
>>887409
D L R
L
R
#18 #887714
Господа анонимные шарписты, где почитать про библиотеки?

Вот у меня есть самописный редактор уровней для самописной игры. Есть инструменты - кисть, ластик, селектор для работы со свойствами конкретного блока и создания связей, етц. Каждый такой инструмент - синглтон, наследующий интерфейс ITool. Я хочу каждый такой инструмент сделать дллькой, чтобы в коде это выглядело как-то так:
foreach (var tool in toolDir.GetFiles(*.dll))
Tools.Add(tool.Name, tool);

Мне нужно узнать собственно про импорт и детали создания. Если просто создать новую библиотеку классов, сунуть туда все связанные интерфейсы и код из текущих классов, это будет правильно?
887778
#19 #887778
887787
#20 #887787
>>887778
На первый взгляд, выглядит правдоподобно. Спасибо.
887926
#21 #887926
>>887787

> На первый взгляд, выглядит правдоподобно


Это только на первый взгляд, на самом деле MEF - хуита лютая. Я хотел использовать в своем проекте, но, почитав доки и посмотрев примеры кода, решил, что нахуй это всё. Ограничился подгрузкой модуля через Reflection, куда быстрее и проще.
#22 #887928
Я не понимаю шарп и мне больно.
887937888300
#23 #887937
>>887928
Как можно не понимать один из самых простых языков программирования? Синтаксис самый что ни на есть классический, без новомодных выебонов. Каких-то подводных камней, на которых может споткнуться начинающий - нету. Возможностей во фреймворке куча на все случаи жизни, а если чего-то нет, то для этого наверняка есть сторонняя либа. Шарп - наверное лучший язык для вхождения в программирование, а ты его не понимаешь. Странно как-то.
887943
#24 #887943
>>887937
дотнет - не самый простой фреймворк
887946
#25 #887946
>>887943
А что, из современного и универсального есть что-то ещё проще?
888020
237 Кб, 751x576
#26 #887955
Интерпрайзоны, а какие у шарпа преимущества в корпоративной разработке перед 1c и java?
888020
#27 #888020
>>887946
руби-хуюби?

>>887955
охуеть, сравнивать .net и 1с
https://ru.wikipedia.org/wiki/Сравнение_C_Sharp_и_Java
888251
#28 #888049
Читал давеча, что нового в седьмой версии и у меня возникает только один вопрос: почему Сишарп такой охуенный?
888073
#29 #888073
>>888049
так, небось, пидары как всегда наобещают, а потом повводють один синтаксический сахар
888162
#30 #888117

> Что почитать про юнит тесты, чтобы научиться их писать? Много раз слышал, но сам не пользовался.



Просто про юниттесты - книга roy osherove unit tests чегототам, в целом дает норм представление и многие моменты разъясняет.
Толковый справочник xunit test patterns

По мне, юнит тесты дают максимум выхлопа при tdd.
Мой путь был таков:
Unit tests for fridy cats like me на pluralsight
Еще пачка видосов от туда по этой теме, вплоть до курса марка симана
Книжка growing object oriented software guided by tests - вот после нее все встало на свои места и теперь мне без test first жизнь не мила.
#31 #888162
>>888073

>а потом повводють один синтаксический сахар


А они же вроде ничего кроме сахара и не обещали (паттерн матчин там будет примитивный)
888260
#32 #888225
Уже год как вкатился в асп мвс. Каждый день я занимаюсь крудошлепством и ковырянием проекта, знания которого никак не помог мне при перекате в другую контору. Если бы это не разбавлялось фронтэндом и написанием тестов, я бы уже завыл от безысходности.
Это вот так все и будет продолжаться? Когда начнется интересная часть? Про многопоточность могу не мечтать?
888231888297888364
#33 #888231
>>888225
Точи навыки в попенсорсе, есть множество проектов на .Net где требуются люди с опытом и горящими глазами делать что-то интересное.
#34 #888242
>>887254
>>887268
В общем, хотел расписывать ответы на вопросы, но таки нашел решение.
Прежде всего напишу, что я не программер, никогда на него не учился, и это всё - чистое хобби. Так что возможно я просто не учёл какую-то особенность языка.

Сначала скажу, что я использовал не Bitmap, а класс-обертку (DABitmap) над ним, которая позволяет доступ к пикселям напрямую - получается доступ к массиву каналов без unsafe кода, LockBits, Marshal.Copy и прочей ненужной шелухи, при этом со скоростью того самого LockBits. Написал свои методы GetPixel и SetPixel, работаю с ними.
Для обработки картинки я сделал функцию ProcessBitmap, которая изначально принимала и возвращала DABitmap, затем в вызывающем коде уже выполнялся Bitmap.Save. Всё работало прекрасно, однако прога стала сжирать память в больших количествах. На маленьких наборах картинок ещё всё отрабатывало, а на полном массиве, по моим подсчетам, ей понадобилось бы около 20 гигов оперативки. Я прогнал профайлером и обнаружил, что по какой-то причине те самые одномерные массивы каналов после использования продолжали оставаться в памяти, по ~2 мб на картинку. Я решил изменить функцию так, чтобы она принимала исходный DABitmap, и через ref обычный битмап, в который нужно возвратить результат. Прописал возвращение через Bitmap.Clone, затем вручную Dispose на используемые ресурсы. Пожирание памяти прекратилось, но стала выплывать проблема из >>887209. В итоге я решил ради теста не возвращать битмап, а сохранять его непосредственно из ProcessBitmap (вместо Clone), прямо перед диспозом. И, о чудо, всё вдруг заработало прекрасно. Я прогнал ради теста раз 20 на разных наборах картинок, ошибка перестала появляться.

Такие дела. Но мне всё же непонятно, почему вылетала та ошибка. Явно каким-то образом мой склонированный битмап исчезал из памяти раньше, чем успевал сработать Save, но как такое возможно?
888536
45 Кб, 1247x581
#35 #888251
>>888020
Как руководители определяют, на какой инфраструктуре сидеть? В 1с все шаблоны отчётиков готовы и бух функции написаны. Так чем шарп для предприятия лучше? (Как доказать работодателю, что оставаясь на шарпе, мы сможем большее? В чём наше конкурентное преимущество?)

Или иначе задам вопрос, каким компаниям выгоднее .net а каким 1c?
888260
#36 #888260
>>888251
тут вопрос не в том, что шарп лучше для бухучета или наоборот, а что это сравнение не совсем правильное: как теплое и мягкое

>>888162
и даже свитч-кейз для типов будет оберткой над if (obj is Type) { (Type)obj. } ?
нупиздец
888296
#37 #888296
>>888260
Ну им же легче компилятор дописать, чем саму clr чтобы она понимала твой паттерн матчинг. Зато работать будет без обновлений фреймворка
sage #38 #888297
>>888225
Многопоточность?
Ну попробуй редактировать и удалять одну и ту же сущность в паралели - если всё ёбнется - чини. Узнаешь про потоки
#39 #888300
>>887928

>я тупой


>мне больно


отсутствие мозга создает вакуум.
Потому тебе больно.
47 Кб, 1276x763
#40 #888364
>>888225
Подмогите, аноны. Обращался в прошлом треде, уже больше понимания, но остались еще вопросы.

Дали курсовой по .net сделать интернет магазин.
То, что должно быть в проекте обязательно:
N-tier
asp MVC
autofac
EF CodeFirst

Должно быть 4 слоя:
1) Репозиторий
2) Домен
3) Сервисы
4) MVC

Я все правильно понимаю или нет?
Буду искренне благодарен!
888391888409
#41 #888391
>>888364
Я сам джун, но всё-таки отвечу.

Делай три слоя:
Domain
DAL
Web

В Domain лежат сущности, сервисы и интерфейсы репозиториев. Этот слой ни от кого не зависит. Здесь реализуется только бизнес-логика.

-----

DAL - реализует интерфейсы репозиториев из Domain. Соответственно, от него же он и зависит. То, что ты пишешь реализации интерфейсов в отдельной сборке позволяет тебе полностью абстрагироваться от способа хранения данных, у этого есть свои плюсы:
1. Ты не думаешь понятиями EF или других механизмов хранения данных, когда пишешь Domain-слой
2. Ты можешь писать юнит-тесты для Domain-слоя, делая заглушки для репозиториев
3. Если приспичит, то можно без особой боли отказаться от EF (хотя хуй знает, зачем)

Отдельно стоит сказать, что в DAL слое у тебя, скорее всего, будут лежать дубликаты всех сущностей в виде DTO. Причина этого в том, что в Domain слое ты, по хорошему, убираешь часть сеттеров (например, у пользователя нельзя поменять id после создания). EF пошлёт тебя нахуй, если ты попытаешься создать сущность с отсутствующим сеттером и без конструктора по умолчанию (который без параметров). Поэтому тебе нужно будет маппить доменные сущности к DTO и обратно. Чтобы не писать тучу однотипного кода, есть готовые либы, можешь погуглить. Алсо, в этих DTO ты можешь использовать аннотации для описания схемы бд, типа [StringLength(200)]. Все эти DTO можешь пометить модификатором internal, поскольку кроме DAL-слоя о них никто не знает.

-----

Web, соответственно, зависит от двух верхних слоёв и делегирует исполнение бизнес-голики доменным сервисам. В контроллерах не должно быть никакой бизнес-логики. Только валидация, преобразования сущностей в DTO (например, тебе нужно в результате отдать данные пользователя в виде JSON, но ты не хочешь отправлять его пароль) и отправка результатов на выход.

Ахуеть, я на курсовых только формошлёпством занимался. Удачи тебе.
888422
#42 #888409
>>888364
Вроде все так. Только учти, что нижние слои не должны знать о верхних, что-то типо такого:
Domain <- Repo <- Service <- Web
т.е. доменка не связана ни с чем, репозитории знают только о доменке и т.д.
888437
#43 #888422
>>888391
Спасибо, я еще до конца не разобрался, но разве не с помощью IoC контейнеров реализуются интерфейсы репозиториев?
888428888431
#44 #888426
Посоны, EF рабочая технология или нет? Разве запросы не проще хранимыми процедурами написать? Энторпрайз уровень, EF видел только в простейших реализациях.
888428888623
#45 #888428
>>888422
Зависимость для контейнеров прописывается на уровне web-приложения как раз.

>>888426
Что тебе мешает вызывать хранимые процедуры из EF? Да и не все же ты на хранимках будешь делать. Где-то достаточно простого запроса с использоваие linq и EF, если даных не много. Зачастую мне кажется EF в тырпрайсе только по историческим причинам существует - когда-то запилили, ибо самый удобный инструмент был, а микро-orm небыли на слуху и не пользовались популярностей.
888436
#46 #888431
>>888422
IoC контейнер всего лишь управляет зависимостями. Например, у тебя есть сервис, который зависит от объекта типа IUserRepository. Ты хочешь скормить ему реализацию в виде UserRepository. При этом UserRepository лежит в другой сборке и напрямую ты от него не зависишь.

Для этого тебе нужно настроить твой IoC-контейнер. Ты пишешь либо в DAL, либо в Web-слое что-то рода:
Bind<IUserRepository>().To<UserRepository>();

Всё. Теперь любой, кому понадобится реализациия IUserRepository, сможет её получить. Автомагия IoC-контейнера подставит репозиторий в конструктор для твоего сервиса.
888444888669
#47 #888436
>>888428
там где достаточно простого запроса, селекта через ADO хватает. Про энторпрайз - я имел в виду, что EF там нет. (Ориентируюсь на SharePoint).
888473
#48 #888437
>>888409
Спасибо, еще раз, а то не мог найти, что бы доступным языком объяснили
888444
#49 #888444
#50 #888473
>>888436
Через ado пиздец неудобно работать - linq куда красивее и проще.
#51 #888534
>>887105
Джуном без опыта устроиться непросто. Сейчас джунов как говна, а позиций не так уж много. Легче мидла одного нанять чем несколько джунов.
#52 #888535
>>887277
А вот этого пидора хорошего человека внезапно двачую
#53 #888536
>>888242

> Прописал возвращение через Bitmap.Clone



Наверное из-за этого ошибка была:

It is the common difference between a "deep" and a "shallow" copy, also an issue with the almost-deprecated IClonable interface. The Clone() method creates a new Bitmap object but the pixel data is shared with the original bitmap object. The Bitmap(Image) constructor also creates a new Bitmap object but one that has its own copy of the pixel data.

Using Clone() is very rarely useful. Lots of questions about it at SO where the programmer hopes that Clone() avoids the typical trouble with bitmaps, the lock on the file from which it was loaded. It doesn't. Only use Clone() when you pass a reference to code that disposes the bitmap and you don't want to lose the object.
888972
#54 #888539
>>887279

> На русском всё устаревшее, на английском годная литература в основном только за бабло.


Все основные книги по шарпу из шапки переведенына русек, даже если не последнее издание ничего страшного в этом нету.

> Просто ставишь себе задачу "написать такое-то приложение", гугл в зубы - и вперёд, по пути всему, что потребуется, научишься.


Знал я таких хуесосов, которые хвастаются своими еба проектами которые написали с помощью гугла и SO, но при этом даже не знают для чего используется ключевое слово static. Так что книги нужно будет осилить в любом случае для более глубокого понимания предмета.
#55 #888623
>>888426
инфраструктура EF дает возможность писать те участки кода, которые зависят от обновления БД, но писать триггеры, самому высматривать что удалилось/изменилось/добавилось, возможность отсутствует
#56 #888661
>>887276

> ITVDN курсы лысого Путина, но не зашла часть после машинных кодов, все эти байты и прочая хуйня


Там что, умные вещи рассказывают? Посмотреть что-ли.
891036891039
#57 #888669
>>888431
ioc еще всего-лишь вынужден управляет временем жизни инстансов, так-то
#58 #888972
>>888536

> pixel data is shared with the original bitmap object


Боже мой, ну вот нахуя они это сделали? Ещё и нигде про это не написано. От функции с именем Clone ждёшь совсем другого поведения.
888986
#59 #888986
>>888972
ну тошо копировать пару мегабайт данных это вам не это. достаточно много всякого в BCL неочевидно в угоду производительности
#60 #889009
Шарпаны, поясните за массивы vs коллекции. Как я понял, для повседневных нужд лучше использовать коллекции, особенно специфичные их типы: таблицы хешей, стёк и прочее. Для высоконагруженных задач обычные(особенно двумерные/зубчатые) подходят лучше.
889022
#61 #889022
>>889009
массив - это тоже коллекция, так-то

> для повседневных нужд


> особенно специфичные их типы


охуенная логика

хэшсеты, стэки и прочее используются там, где нужны хэшсеты, стэки и прочее. для того, чтобы загнать некое множества данных от одного места в другое, обычно используют T[]/List, прикрывая все это IEnumerable. изредка появляется необходимость использовать нечто вроде IList, IReadOnlyCollection. в качестве коллекции, которую можно дополнить/урезать - соответственно List/Collection
889032
#62 #889032
>>889022
Я нюфаня, но твой посыл примерно понял. Буду решать задачи с использованием всех возможных типов, по необходимости.
889038
#63 #889038
>>889032
пробегись глазами сюда http://metanit.com/sharp/tutorial/4.1.php раз уж так
#64 #889055
Пацантре, как работать с соц.сетью, который не выдает свое API? Вернее, выдает его только охуительным разработчикам и т.д., а для моего говно-софта для разного рода спама его не получить.
Какие варианты еще есть?
889057
#65 #889057
>>889055

> выдает его только охуительным разработчикам


это чо значит? типа надо купить/подписаться?

парсить страницы
889059
#66 #889059
>>889057
Типа надо быть разработчиком с идеей охуительного приложения и готового шаблона, дабы предоставить этим пидоразам на проверку, а далее получить доступ.

Благодарствую за ответ.
Но нет ли другого способа? Уточню пожалуй, что речь о instagram-е. Все же акцент хотелось бы сделать на эмуляцию действий с мобильного приложения, а не через их веб-калеку.
889062
#67 #889062
>>889059
хех, ну как вариант найти способ спарсить реквесты/респонзы инстаапп своего мобильника
889064
#68 #889064
>>889062
Еще раз благодарствую и посылаю нахуй эту идею, знания не дотягивают, увы...
Возможно вернусь через пару лет к этой идее.
Кстати, меня в целом интересует всякого рода спам и т.д.
Есть ли где-нибудь охуительная обучалка по POST/GET?
889070
#69 #889070
>>889064
не уверен, что понял вопрос. пост/гет - это протокол HTTP, REST-сервисы и вся эта затея
889072
#70 #889072
>>889070
Да, я и говорил о HTTPS запросах. Т.к. API мне не получить, а вся эта ебля с телефоном не для моего уровня, то можно для начала хотя бы попробовать реализовать через калека-браузерную версию.
889074
#71 #889074
>>889072
ну HTTPS - это HTTP + шифрование на уровне клиента
самое сложное (как мне кажется) - это как раз с телефона декодировать что/куда/кому направляется т.к. тебе понадобится сертификат которого у тебя нет. либо колдовать над wireshark и ему подобными. но я тебе тут вообще подсказать ничего не могу
благо, у браузеров есть Console/Network, где вся эта херня проходит без проблем. тут встанет вопрос, применим ли браузерный API к кему-нибудь, или придется парсить хтмл
889075
#72 #889075
>>889074
А как насчет этого?
Могу я попросить тебя пробежаться глазами мельком?
Только сейчас нашел.
https://github.com/mgp25/Instagram-API
889085
#73 #889085
>>889075
судя по всему - это как раз и есть имитация тыкания пользователем кнопочек в браузере. только мне сложно понять как оно распознает ответ сервера (ибо рнр), но не думаю, что там что-то революционно уникальное
889087
#74 #889087
>>889085
Для начала нужно переписать код с PHP на C#.
Сколько примерно будет стоить такой заказ? Т.к. в PHP у меня знания только на базовом уровне, на начально-базовом.
889088889092
#75 #889088
>>889087
я хз
889094
#76 #889092
>>889087
оче дораха, делай форк и развивай свои скилы на си решётке.
#77 #889094
>>889088
Ладно, проехали, ты и так мне помог аноняша.
Накидай годных гайдов и т.д., дабы усилить свои знания именно для таких целей, разработка софтов онли для соцсетей и т.д.
Какие-то определенные библиотеки может изучать, ну или пути, ну и т.д. Просто недавно только подсел на C#, общее понятие о программирование есть, лет 5 назад сутками напролет кодил, сейчас решил вернуться, только вот всю эту хуйню подзабыл, да и сейчас нужны знания онли для такого рода целей, спам и прочая хуйня в соц.сетях.
889098
#78 #889098
>>889094
Тереби профильные форумы на технологии -> ищи аналоги на C#
#79 #889238
Возможно ли в 2016 собрать проект на Xamarin.Android, используя линупс?
889275
#80 #889275
>>889238
В чем проблема?

Ставь MONO + Android SDK, собирай msbuild или xbuild
#81 #889291
>>887100 (OP)
Не первый раз встречаю мнение, что МС забросили WPF. Насколько это правда?
889339889345891561
#82 #889339
>>889291
Нафиг тебе WPF, когда есть UAP?
889356889512
#83 #889345
>>889291
это неправда как и то, что ms забросили winforms. конечно, не сказать, что это приоритетная разработка или хотя бы где-то в топах, но тем не менее
#84 #889356
>>889339

>UAP


Я же не плиточный пидор.
889364
#85 #889364
>>889356

>Я же не плиточный пидор.


А какой ты пидор?
889366
#86 #889366
>>889364
АХаха, как ловко ты попытался меня подловить. Прям как в школе в молодости. Я никакой не пидор.))))
114 Кб, 1513x873
#87 #889473
Друзья помогите пожалуйста новичку.
В плане хобби\кучи свободного времени на работе изучаю .NET
Хочу в итоге написать небольшое картографическое приложение для себя. Начал курить варианты настольных приложений - Windows Form, XAML. У меня вопрос, возможно некорректно поставленный, на какой технологии создано родное приложение "Карты"? В частности как реализованы вкладки и вот такого плана меню, как на скрине? Если можно подробней, материал по теме я сам найду. Вообще в чем имеет смысл из современных технологий приложений для десктопа разбираться?
889482889504889511
#88 #889482
889491
#89 #889491
889506
#90 #889504
>>889473

>на какой технологии создано родное приложение "Карты"?


UWP или WinRT, зависит от версии Windows.
889508
#91 #889506
>>889491
Это UWP
#92 #889508
>>889504
Windows 10
#93 #889511
>>889473

>В частности как реализованы вкладки и вот такого плана меню, как на скрине?


Не понимаю твою огромную желтую мазню. Могу попробовать ответить если ты разобьешь это на несколько отдельных вопросов с отдельными картинками.
889516
#94 #889512
>>889339
Странное сравнение. Это ж разные программные платформы(UWP = mobile в котором возможности обрезаны ради безопасности end user'a, WPF = необрезанный .NET 4.6.*,).
76 Кб, 1484x698
170 Кб, 1494x747
44 Кб, 479x554
#95 #889516
>>889511
Как в окне приложения реализованы вкладки?
В данном случае результат поиска "пик 1" отображается в новой вкладке "пик 2" + открывается информационная панель со списком объектов около этого адреса с возможностью ее свернуть либо перейти к информации о конкретном объекте "пик 3".
Мне интересно на основе какой технологии в приложении я могу реализовать возможность открытия и работы в нескольких вкладках (в идеале конечно еще возможность вкладку выводить в отдельное окно, как в Edge например), а также реализовать подобные скрывающиеся меню.
889524
531 Кб, 1920x1080
#96 #889524
>>889516
1 это не вкладки, а просто список(с горизонтальной ориентацией разве что, больше в нем ничего необычного не вижу).
2 это контейнер(какой-нибудь Grid или StackPanel) содержимое которого через binding привязано к выбранному элементу списка 1. Насчет того что он заменяет поиск: либо это просто 2 контрола размещены в одном месте и у них переключается видимость, либо сложный кастомный UI контрол с разными состояниями.
889526889529
#97 #889526
>>889524
Забыл еще кое-что, вся верхняя панель это AppBar.
#98 #889529
>>889524
Спасибо
Интерфейс реализован на XAML? Тк это UWP приложение, то соответственно Windows Runtime XAML?
889531
#99 #889531
>>889529
Да, ты правильно понял.
#100 #889689
Шарпач поясни,
есть необходимость подсчитать в коллекции кол-во элементов, удовлетворяющих условию. Как лучше всего сделать, через массив + счётчик или использовать метод Count от LINQ? Как вообще оценить нужность того или иного подхода?
#101 #889712
>>889689
Это зависит от того, что тебе нужно. Функциональный стиль делает твой код более коротким, понятным и не оставляет шансов обосраться.

Сравни:
int goodItemsCount = yourCollection.Count(x => x.SomeField == 42);

С этим:
int goodItemsCount;
for(int i = 0; i < yourCollection.Length; i++)
if(yourCollection.SomeField == 42)
goodItemsCount++;

Однако, за всё хорошее нужно платить. В конечном счёте, это влияет на производительность. Использование LINQ будет менее производительным, в сравнении с простым массивов и циклом со счётчиком.

Но, стоит сказать, что в современном мире все дружно кладут хуй на производительность в пользу читаемости. Так что best practices считается - "Всё пишем на LINQ. Если приложение тормозит, то замеряем профайлером. Если проблема в коде с LINQ, то перепишем его."
889716889717889719
#102 #889715
>>889689
оценить через О(н) и другие асимптотические показатели, как и всю алгоритмическую сложность/эффективность кода

.Каунт(предикат) будет работать через получение энумератора и инкремент счетчика при удовлетворении условия, так что конкретно в данном месте ты ничего кроме времени не потеряешь
#103 #889716
>>889712

>if(yourCollection.SomeField == 42)


Собственно, наглядная демонстрация того, как быстро можно обосраться с таким подходом. Я имел ввиду конечно же:
if(yourCollection.SomeField == 42)
889718
#104 #889717
>>889712

> Использование LINQ будет менее производительным, в сравнении с простым массивов и циклом со счётчиком.


это схуяли?
#105 #889718
>>889716

>if(yourCollection.SomeField == 42)


Какого хуя? Двач квадраные скобки обрезает?
889725
#106 #889719
>>889689
>>889712
Кароч, сам потестил с помощью Stopwatch и пришёл к интересному выводу: чем массив больше, тем меньше разница ручного обхода с LINQ. Но обход ручками аж в 30 раз эффективнее на малых (кол-во элементов <1К) и всего в 2 раза на больших (>=100000).
889720
#107 #889720
>>889719
стопвотч в таких анализах не самое эффективное средство. вангую ты еще без прогрева дженнриков тратил,запуская линкью следом после итерации массива?
889721
12 Кб, 444x315
#108 #889721
>>889720
Сложна
FillArray заливает массив рандомными значениями.
889729
#109 #889725
>>889718

> Двач квадраные скобки обрезает?


Парсер тегов кривой, епты. Все это знают.
#110 #889729
>>889721
хуйня этот твой тест, в массиве, состоящем из одного/двух элементов небось получишь разницу на джва порядка

в офисе буду - отвечу, если будет интересно
889740
#111 #889740
>>889729
во-первых, в первом случае ты захватываешь упаковку значения результата в Console.WriteLine, в подсчет времени выполнения

во-вторых, ты сравниваешь методы для int[] (который является фундаментальным типом) и IEnumerable<T> (который является а) хуй пойми чем для рантайма, б) является универсальным типом). и тут надо знать, как дженерики вообще работают: jit компилирует на ходу (если еще не сделал это) отдельный тип для всех ссылочных типов и по каждому на все значимые. следовательно, ты, вкупе со всем, загоняешь в подсчет времени выполнения еще интервал компиляции класса

отсюда напрашивается объяснение этому вот:

> чем массив больше, тем меньше разница ручного обхода с LINQ


если, условно говоря, компиляция типа и упаковка инта в кучу занимает 10 условных единиц времени, а обход массива из n элементов - n * 0.1, то, грубо говоря, на двухсотом элементе массива время выполнения обоих случаев выйдет в паритет

ну, и в-третьих - реализация IEnumerable<T>.Count(Func) выглядит так:

if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
int count = 0;
foreach (TSource element in source) {
checked {
if (predicate(element)) count++;
}
}
return count;

тут мне сложно пока что давать этому оценку, бенчмарки for/foreach довольно сильно разнятся и говорить, что linq хуёв только из-за foreach, я бы не стал (а может быть и стал)
889741890123
#112 #889741
>>889740
Но хабрабляди пишут что foreach пиздец как оптимизирован и потому используется везде, где только можно.
889744
#113 #889744
>>889741
он поэтому и оптимизирован потомушто используется везде, где только можно
в основном бытует мнение, что foreach сиравно медленнее, чем for. но, даже если это и так, насколько медленнее? одна статья 13го года говорит, что в 0.000000000000000000000001 раз, другая, 14го, дает разницу в несколько раз. кому верить - непонятно никому, естественно
890259
#114 #890123
>>889740
какая нахуй сегодня разница в скорости foreach или for. Похуй на декларативность, foreach - тут тебе и рефлекция инклудет, и вся разная кошерность. Учитывая что в 99% на шарпе пишутся web решения, а значит и деплоятся на win сервах(кол-во решений на core умножаю на 0), вопрос о быстродействии отпадает сам по себе
890210
#115 #890165
Бля, аноны, я знаю, что у вас сейчас подгорит, но очень нужна ваша помощь.
Дело в том, что я просто пиздец как хочу выучить этот язык, я, блядь, просто обажаю шарп!
Но увы, синтаксисы я не знаю, общий подход также не знаком мне.
Поэтому няши, я вас прошу не кидать в меня говно и подкинуть идеи, как нормально выучить шарп с нуля. Я готов днем и ночью вникать и делать, только вот решить не могу, везде советуют разное.
Отдельная просьба, написать именно то, с чего вы начинали сами, ну или хотя бы лучшую книженцию для новичков по шарпу, можно и видео уроки, сайты и т.д.
Буду вам очень благодарен!
#116 #890169
>>890165

>везде советуют разное


Я бы тебе посоветовал, но это для тебя будет лишь +1 способ выучить c#.
#117 #890170
>>890165
Книженцию-хуюженцию. Пиздуй в скайп sergey.krivonos2
поясню азы тебе
#118 #890206
>>890165

>я обожаю шарп


>синтакис не знаю, общих подходов не знаю


>хочу нормально выучить.


Ты охуел тут на ноль делить?
А вообще ты странный, в шапке указан большой список литературы, рассортированной к тому же. Посмотри для начала шапку, а потом уже сам поймешь.
#119 #890210
>>890123
печально, но приходится работать с такими же гениями, как и ты. вас где-то в инкубаторе делают? откуда ж такой тотальный похуизм к тому, чем занимаешься
#120 #890259
>>889744

>в основном бытует мнение, что foreach сиравно медленнее, чем for. но, даже если это и так, насколько медленнее? одна статья 13го года говорит, что в 0.000000000000000000000001 раз, другая, 14го, дает разницу в несколько раз.


Это легко померить. В C# 2.0 разница точно была, по памяти примерно на 30% при проходе по массиву intов. Сейчас тот же код (у меня сохранился с тех лет) на C# 4.6 никакой разницы не показывает вообще.
Кстати раньше и тернарный оператор был на 20% медленнее чем if else.
890349
#121 #890292
>>890165
П - практикуй, начни с лабораторок для студентиков.
И - импровизируй, решай задачи максимально разными способами, от очевидных до самых ебанутых. Если не знаешь последних - ищи в интернетике по ключевым словам задачи.
Толку от чтения книг без понимания зачем оно там всё так мутно расписано - нет. Решение задач создаст необходимость и возможно мотивацию при очевидном ощущении прогрессаю
890386
#122 #890349
>>890259
Код в студию!
890353890454
#123 #890353
>>890349
почитал ваш тред и утверждаю:
Ребят, вы какой-то хуйнёй занимаетесь.
890357890454
#124 #890357
>>890353
Покажи нюфаням что не хуйня? В хаскеле на функционал теребить?
890372890374
#125 #890372
#126 #890374
>>890357
Не хуйня? Многопоточность например. Лучше бы ее дрочили а не foreach vs for.
890384
#127 #890384
>>890374
просто ты вчера прочитал про потоки и решил, что вот это не хуйня, а все остальное хуйня?
тащемта все из мелочей складывается: идеально спроектировал синхронизацию потоков/данных, но проебал в работе с коллекцией/памятью - считай, зря время потратил
890424890426
#128 #890386
>>890292
Понял, спасибо.

А есть охуенные документы по-типу autoit-овской?
Там на русском все так охуенно написано, подача легкая, примеры также легкие, очень легко освоить новичку.
Подобные доки для шарпа есть?

Вот пример autoit-овской документации: https://autoit-script.ru/autoit3_docs/functions/ControlListView.htm
890389
#129 #890389
>>890386
msdn, другого не завезли
890390890392
#130 #890390
>>890389
а как же давно мертвый rsdn?
890391
#131 #890391
>>890390
OBSOLETE
#132 #890392
>>890389
Благодарен няша.

А ты как выучил сей замечательный язык?
890398
#133 #890398
>>890392
Я не выучил, я его учу. Знал до него на среднем уровне Си - базовые навыки алгоритмов, дискретной математики, строения ПК и ОС имеются. В данный момент активно нарабатываю практику работы с LINQ + коллекции (оче удобно). Дальше планирую GUI(WPF) + сети (сокеты/хуекеты). Пидорю тестовые задания для джуниуров. 90% вопросов решаются правильным запросом в гугл и последующим переходом на англоязычный Stackoverflow.
По книгам могу посоветовать следующий порядок: Троелсон -> Альбахари -> Рихтер.
Учти, я говорю только про язык - навыку программирования можно научиться только пидоря код, читать паттерны/алгоритмику, искать схожие решение и снова и снова и снова пидорить код.
#134 #890424
>>890384
ты немного не понял.
Обосрался с потоками - обосрался с логикой.
Выбрал вместо foreach for - нихуя не помеянлось кроме байтоёбства

Многопоточность ведь не всегда про скорость выполнения.
890439
#135 #890426
>>890384
В случаях оптимизации вопросов нету - ты прав. это я просто решил дополнить.
Я просто к тому что есть более важные вещи чем сравнение for и foreach
890439
#136 #890439
>>890424
>>890426
ну можно поманяфантазировать и представить, что мы пишем кастомную коллекцию и соответствующий кастомный итератор, который оказался не структурой, а коллекцию перебирают по сто раз в наносекунду
не зная, чем является foreach, IEnumerable<> и вся эта хуйня, можно так же нехило обосраться с утечкой памяти, потере времени на сборку мусора (в итоге загоняя временные объекты во второе поколение) не хуже этих ваших потоков


> есть более важные вещи чем сравнение for и foreach


ну тут как посмотреть. вообще, субъективно для меня интереснее зарыться в, казалось бы такое примитивное и очевидное говно, как стукруры vs классы, реализация интерфейсов, перебор коллекций. нупотомушто какие вопросы с многопоточностью являются вот такими, грубо говоря, совершенно неожиданными вещами? ты либо знаешь, либо не знаешь. оно либо работает, либо не сработает потому, что ты еблан. либо new Thread().Start() ибо итак норм, либо более адекватные методы
#137 #890447
Господа, поясните вот что.

Загорелся желанием изучить Шарп, скачал видяхи ITVDN и начал смотреть лысого.
Так вот, первые уроки зашли на ура, но вот дальше началось байтоевство, которому мне на данный момент нахуй не нужно.
Поясните за байты, стоит ли все же вынудить себя выучить эту еблю, или можно смело менять обучение на другие уроки и книжки, где нет байтоебства?
901607
20 Кб, 1144x583
#138 #890454
>>890349
Пикрилейтед.

>>890353
Тебя забыли спросить.
94 Кб, 604x512
#139 #890458
>>890454

>button99_Click


>button101_Click

890460
#140 #890460
>>890458
Почему-то у всех пригорает с этого.
#141 #890495
>>890454
а в чем прикол вложенного массива?
890515890634
#142 #890515
>>890495
хотя, массив в тыщщу миллиардов элементов это вам не это. проще было бы уже один массив на 100 элементов прогнать четыре-пять раз дабы не допустить его попадание в LOH
#143 #890622
>>890454

> button99_Click


> richtextbox


> однотипные функции, наполовину состоящие из повторяющегося кода


Фу, блядь. И этот человек ещё рассуждает о внутреннем устройстве языке. Самому то не стыдно такое выкладывать?
890634
#144 #890634
>>890495
Чтобы меньше памяти жрать и дольше выполнялось, для более высокой точности оценки, т.к. tickcount имеет минимальный шаг 16 мс.

>>890622

>Самому то не стыдно такое выкладывать?


Нет. Это отдельный проект который только и состоит из таких мелких функций, всё назначение которых это сделать один тест и получить результат и больше не его никогда использовать. Нет никакого смысла делать что-либо легкочитаемым, поддерживаемым и тому подобное, т.к. никакая поддержка и чтение вообще не подразумевается. Вы ребята слишком увлеклись быдлокодингом, и наверняка каждый тестовый код делаете с паттернами, осмысленными именами и прочей поебенью, и ставлю анус что в серьезном проекте несмотря на всё это обосретесь и сделаете его трудноподдерживаемым в итоге.
890635890772890946
#145 #890635
>>890634

> больше его никогда не использовать


фикс
#146 #890649
Кстати там достаточно интересные тесты есть. Например int? работает в разы (если не десятки) раз медленнее чем int. Увеличение переменной в структуре из самой структуры работает быстрее чем увеличение из внешнего по отношению к структуре кода.
#147 #890724
>>890454
Скинь весь проект. Интересно посмотреть тесты.
890742
#148 #890742
>>890724
Ты там ничего не разберешь. Даже я много чего не понимаю. Многие тесты сделаны для конкретных алгоритмов которые я писал когда-то, я уже даже забыл каких.
890744
#149 #890743
кто пишет на .net core: какие кто. наличии адекватные средства для профилирования памяти? нашоль в гитхабах CoreProfiler, по-моему, но вот слабо разобрался, как его впердоливать в приложение. также мсдны говорят про интерфейс ICorProfiler, и, судя по всему, он также действует по принципу "интегрируй меня в приложение и пингуй время от времени". есть что-то чуть более френдли, а-ля дотмемори - запустил в стороне и смотри на графики?
891226902381
#150 #890744
>>890742
Ну так ясен хуй он не разберет, они же рряя одноразовые вы проста быдло и нипанимаете что button1337_Click это удобно а я большие проекты пишу!
890749
#151 #890749
>>890744
Да, так и есть.
890751
#152 #890751
>>890749

> Да, ситуация говорит, что я обосрался. Что ж, сделаем вид, что все по плану и обосрались все вокруг.

890760
#153 #890760
>>890751
У тебя багет что ли?
#154 #890772
>>890634
Паттерны же только уродуют код и делают его менее читаемым для стороннего разработчика. Вообще эта хуйня, зачастую идущая против принципов ООП, не понятно нахуй и откуда взялась.
#155 #890946
>>890634

>минимальный шаг 16 мс


Не всегда, и у тебя сейчас скорее всего 1мс, а вообще можно вручную задать
13 Кб, 302x437
#156 #890985
Поможите с wpf.

Создал textBox_logWindow который хочу использовать в качестве лога.
Создал файл класса LogWindow. В самом классе хочу определить методы для запист в лог, сохранения лога и т.д.
Думал что, поскольку общий namespace, для добавления нового текста в лог будет достаточно всего лишь
public static void WriteLog(string data)
{
textBox_logWindow.Text += data;
}
Но хер там был.
Пробовал класс LogWindow делать наследником MainWindow. Но один фиг - имею доступ к текстбоксу в MainWindow но не имею в своем классе.

Прошу учесть при критике и даче рекомендаций, что это вообще моя первая программа на C#.

Класс хотел сделать для того что бы в коде была возможность в одну строку LogWindow.WriteLog(data) выводить информацию о работе программы.

Пикрил мой бот для ла2 написанный на autoit, сейчас пилю другую программу, но хотел такой же лог замутить для наглядности работы.
#157 #890991
>>890985

> 2016


> desktop


Но зачем?
890992890993
#158 #890992
>>890991
Чому нет? Не поднимать же микросервисы на каждый чих.
#159 #890993
>>890991
А на чем еще писать десктоп? Или предлагаешь пилить всё в вебе?
901608
#160 #890994
>>890985

> Класс хотел сделать для того что бы в коде была возможность в одну строку LogWindow.WriteLog(data) выводить информацию о работе программы.



Сделай окно синглтоном и сделай в нём паблик метод WriteLog.
И будет что-то вроде LogWindow.Instance.WriteLog(data).
#161 #891028
>>890985
ЛистБокс же
#162 #891036
>>888661
Нет, это унылая хуйня для даунов.
#163 #891039
>>888661
Там комментатор мягко говоря НЕОЧЕНЬ и слушать его просто невозможно, хотя получше индусов на ютубе с их виденьем на английский язык.
#164 #891212
>>890985
Я в таких случаях делал так.
Класс лога статический и инициализируется в конструкторе главной формы с передачей ему объекта textBox_logWindow. Далее класс лога использует этот объект для вывода
891406
бамп, пидоры #165 #891226
893191
62 Кб, 1280x720
#166 #891248
>>889689
Насчет производительности не скажу, но LINQ запрос читать удобнее чем пердолинг с for/foreach.
#167 #891406
>>891212
Можно пример кода того что ты имеешь ввиду? Если не затруднит.
Вроде понял что ты имеешь ввиду, но по коду бы нагляднее было бы.
891410
52 Кб, 1150x1043
#168 #891410
>>891406
Только у меня тут webforms, но я думаю это вряд ли что-то меняет.
891415891626895481
#169 #891415
>>891410
Благодарю, попробую у себя прикрутить такой подход.
#170 #891561
>>889291
Насколько это правда? На форуме разработчиков последний пост об обновлениях был вроде в 2012.
Ну и типа да, как сказал другой анон, WPF переродился в UWP
3 Кб, 457x196
#171 #891626
>>891410
Спасибо анон, я если честно и не думал что кто то подскажет чего внятного, какие то листобоксы, предложение вместо десктопа веб приложение и т.д.

>/pr


С одной стороны мне нравиться сисярп, ибо куча фич и наворотов, но блин - реализация лога на autoit у меня заняла минут 10, на то что бы разобраться как запилить точно такую же вешь сутки ушли(а до этого еще и основы и wpf не один день ковырял). Сложно блин. Особенно то что по сути одну и ту же задачу можно решить десятком способов и не понятно какой способ правилен, а какой говнокод и в будущем вылезет боком.
891660
#172 #891660
>>891626
передача визуального объекта в класс, отвечающий за диагностику, - говнокод
891661891811
#173 #891661
>>891660
Скажи как сделать лучше.
891866
#174 #891802
Теперь вы добавлены в Перекотер, так что вам нет нужды перекатывать треды вручную >>891794
892025
#175 #891811
>>891660
Я насколько понял не говнокодом будет использование data binding. Но блин - в текущий момент для меня это слишком сложно, пытался не раз, но каждый раз после того как весь день читаю гугл и не напишу не одной строчки кода понимаю что мне просто рано еще, надо дальше дрочить теорию и писать хоть что-то как умею. Ибо просто дрочить теорию и вообще ничего не писать только потому что не в состоянии написать как надо - такое себе.
#176 #891866
>>891661
выделить у компонента интерфейс, добавляющий запись, и использовать этот тип в Log
#177 #891869
>>891866
Это бы ничего принципиально не изменило.
#178 #891870
>>891866
Алсо, это всегда легко сделать без изменения архитектуры.
#179 #891871
Есть тут webapi дядьки? Просвятите меня как работать с калейдоскопом технологий и иструментов, что и как актуально в продакшене. А то я спал последние N лет. Интересуют Best Practices для bower/gulp/npm/owin/docker/angular/blablabla.

В первую очередь блядь мне надо поставить менеджер пакетов npm, которому нужен nodejs, на котором я никогда не буду писать. Нахрена эта зависимость? Ну ладно. Ставим bower с помощью npm (Один менеджер пакетов другим менеджером пакетов). Далее используем gulp, чтобы вытащить все актуальные файлы из bower_components в заинджектить html файл. При этом main файлы некоторых нужно перегрузить в bower.config. Пиздец. Всё теперь общается через owen, mvc не нужен вообще, да и докер. Пиздец короче.

Можете покидать ваши стеки/ворклоу с работы? Реально используете gulp&bower&npm? Для чего? А Докер? Как это всё работает с continuous integration?
896547
#180 #891915
>>891866
А можно пример в виде кода о чем речь?
#181 #891938
>>891866
Алсо, на msdn вообще было написано что в wpf единственный комильфо вариант юзать data binding. Получение данных для интерфейса нужно сделать средствами xaml. Все остальное быдлокод если верить msdn.

>If you are getting started with WPF, you might wonder whether it is easier to avoid learning data binding, and instead just write code to do most of the data manipulation in your projects. While this may be a valid way to do it, I would suspect that you will grow to use, and perhaps even love, XAML-based data binding.


https://msdn.microsoft.com/en-us/library/aa480224.aspx
Но я слишком туп, сколько не пробовал - либо не компилится, либо не работает.
892143
#182 #892025
>>891802
Найс.
#183 #892143
>>891938
прям весь мир клином на WPF сошелся?
в любом случае, если это будет биндинг, ты выделишь интерфейс не в Window, а ViewModel и будешь уже изменять её стейт
#184 #892225
Всем привет!
Прошу подсказать как решить проблему или найти обходное решение. Возможно ли приведение из шаблонного делегата в типизированный?

Пример кода:

delegate void DoSmth<T>(object sender, T value);

class SmthClass<T> {
DoSmth<T> doSmth = ...;

void DO () {
OtherClass.Process(ref doSmth); // ТУТ ОШИБКА
}
}

static class OtherClass
{
static void ProcessIntegerDelegate (ref DoSmth<int> doSmth) {...}
}
#185 #892237
Поправил пример:

delegate void DoSmth<T>(object sender, T value);

class SmthClass<T> {
DoSmth<T> doSmth = ...;

void DO () {
var type = typeof(T);
if (type == typeof(int))
OtherClass.ProcessIntegerDelegate(ref doSmth); // ошибка приведения из DoSmth<T> в DoSmth<int>
}
}

static class OtherClass
{
static public void ProcessIntegerDelegate (ref DoSmth<int> doSmth) {...}
}
892256
#186 #892256
>>892237
var intDo = doSmth as DoSmth<int>
#187 #892714
Народ, тоже вопрос про дженерики. Можно ли как-то считывает из строки значение в зависимости от типа?
class GenericMatrix<Number>
{
Number[][] matrix;
GenericMatrixNumber(int cols, int rows)
{
for (int i = 0; i < cols; i++)
for (int j = 0; j < rows; j++)
matrix[j] = СчетатьХуйню();

}
}

Естесно Comsole.ReadLine не подходит. А как тогда?
892716892736
#188 #892716
>>892714
GenericMatrixNumber
Без Number
#189 #892736
>>892714
Такой вариант подойдёт?
https://dotnetfiddle.net/2oEHQs
892739
#190 #892739
>>892736
Так и знал шо нада про делегаты сначала прочитать. Спасибо.
#191 #892865
Сап шарпач.
Как мне зашифровать информацию, с помощью пароля? То есть пользователь вводит любой пароль и он каким-то образом преобразовывается в ключ шифрования. Нагуглил PasswordDeriveBytes, но ему нужна соль и вектор инициализации, откуда мне их брать? Если рандомить, то в следующий раз пользователь не сможет расшифровать информацию этим же паролем. Как быть?
892873892888892900
#192 #892873
>>892865
DPAPI, проще некуда.
#193 #892884
Шарпач, подскажи бесплатный/дешевый хостинг для базы данных, желательно MSSQL, но мускул тоже подойдёт. Azure выглядит шибко дорогим.
892935892955
#194 #892888
>>892865
1. переводишь строку с паролем в массив байт:
var pbytes = Encoding.UTF8.GetBytes(password + "ОХУЕННАЯ_СОЛЬ");
2. хешируешь этот массив байт, превращая его в ключ шифрования:
var aesKey = SHA256Managed.Create().ComputeHash(pbytes);
3. шифруешь AESом с размером ключа = длине хеша и нулевым вектором инициализации:
var AES = new RijndaelManaged();
AES.Mode = CipherMode.CBC;
AES.KeySize = 256;
AES.BlockSize = 128;
AES.Padding = PaddingMode.PKCS7;
using (ICryptoTransform encryptor = AES.CreateEncryptor(aesKey, new byte[16]))
{
return encryptor.TransformFinalBlock(data, 0, data.Length);
}
#195 #892900
>>892865
хранить соль рядом с пользователем. после того, как юзерь что-то навводил сравнивать шифрованый пароль с результатом ПосчитатьХэш(инпуиЮзера, созраненныйСалт)
#196 #892935
>>892884
digital ocean или scaleway - берешь vps, поднимаешь в докере мускл
892955
#197 #892951
Господа, подскажите как лучше всего передать набор объектов, заранее неизвестных но чётко структурируемых в другое приложение по сети?
Текущая мысль сформировалась, что подходит что-то типа JSON сервера, который отдает данные по запросу клиента. Есть ли решения лучше или это достаточно адекватно?
892954892958893186
#198 #892954
>>892951
Сразу поправлюсь, планируемые клиенты (их возможно много) могут быть написаны на каком-угодно другом языке. Тут подумалось, а почему бы не отдавать XML?
892958
#199 #892955
>>892935

> в докере


Иди нахуй со своими докерами

>>892884
Просто берешь самый дешевый дроплет на digitalocean, в один клик ставишь туда образ убунты для поднятия вебсервера. Всё это займет 2 минуты, и у тебя уже будет сразу готовый сервак со всеми нужными развернутыми сервисами, и выделенным IP. Дальше настраиваешь мускуль как тебе угодно и работаешь.
892957
#200 #892957
>>892955
DO чот дораха, нашел у нас за 65р в месяц - выбор нищука.
892964
#201 #892958
>>892951
>>892954
Если для твоих данных не предполагается редактирование человеком, то нахуй все эти форматы. Отдавай напрямую бинарные данные и всё. Сделай микропротокол с одним байтом на команду и всё. С сокетами и массивами байт работать можно в любом языке.
#202 #892964
>>892957
Зависит от твоих требований к стабильности серверов. Юзаю DO с начала 2014 года, десяток дроплетов у меня там есть. Ни разу никакой внештатной ситуации не было. Аптайм одного из дроплетов 100% с февраля 2014 года (другие я просто сам по разным причинам перезагружал или временно отключал). Пять баксов в таком случае за самый дешёвый дроплет не жалко.
5 Кб, 193x241
#203 #893006
Посоны, есть ли нормальная тулза для рисования 3D моделей для XAML чтобы в WPF приложении использовать, я ебал вручную указывать точки, нормали и т.д. чтобы нарисовать что-то простое, требуется часа 2. Есть ли инструмент для создание 3Д моделей чтобы выдавал код в XAML?
893074
#204 #893067
Посоветуйте плз что почитать по потокам (и вообще системному программированию в с#) и вин формс.
мсдн не осилил.
893074
#205 #893074
>>893006
expression blend?

>>893067
старые статьи на rsdn по сему поводу взлетают, если для начала
893075
#206 #893075
>>893074
Спасибо.
#207 #893186
>>892951
Avro
Protobuf
#208 #893191
>>891226
бамп на бамп
#209 #893377
Шарпач, ты-то мне и нужен. Как понять, что ты уже мидл? Если я могу написать дерево, сортировку, умею в синхронизацию потоков, веб-приложения, сериализацию - это уже мидл или нет?
Sage #210 #893390
>>893377

>Если я могу написать дерево, сортировку, умею в синхронизацию потоков, веб-приложения, сериализацию - это уже мидл или нет?


Это уже может быть стажер и ты можешь пытаться пройти собеседование на вакансию.
#211 #893404
>>893377
Сеньор минимум.
893470
#212 #893470
>>893404
ты тролишь или серьезно. Что нужно знать чтобы повысили на мидла?
893475
#213 #893475
>>893470
Ну мидл это самое противоречивое, не рыба ни мясо. В общем случае это опыт фултайма от двух лет, все разнится от вакансии к вакансии, но если ты на той же работе проработал джуном 2 года - просись на мидла точно.
#214 #893478
>>893377
Мне теперь интересно стало, что входит в знание сериализации?

>веб-приложения


JavaScript much?
14 Кб, 300x315
#215 #893485
Посоны, как организовать обмен данными между приложениями в реальном времени на C#.

Есть в общем такая ситуация. У меня есть приложение, которое коннектится с сервером, берет оттуда данные кладет это все в словарь(Dictonary) и обновляет значения в этом словаре каждые 200мс ну и соответственно активно использует этот словарь в работе. Возникла необходимость (у заказчика) сделать приблуды в 3Д красивые, быстро работающие, с возможностью покрутиться, "полетать". Решил для этих целей использовать Unity 3D, там тот же C#.

Сначала думал там использовать ту же библиотеку что используется в основном проекте, прочитал как подключать dll к юнити, все подключатся все нормально, а вот именно Interop библиотека для работы с сервером очень старая и не для C# а в общем для .NET 1.0 и при подключении к Unity выдает Marshall ексепшены и т.д.

В общем есть ли вариант в реальном времени получать этот словарь(Dictionary) из другого приложения(unity).

Думал насчет обмена с помощью базы данных, но будет ли это в реальном времени? С другой стороны в первом приложении данные обновляются долго(200мс) должно все успеваться.
893519893595893599
sage #216 #893504
>>893377

>написать дерево


class MyClass
{
List<MyClass> Childs;
}

>сортировка


myArray.OrderBy(x => x.Name);

>сериализация


JsonConvert.SerializeObject(myDto);

Я принят?? Когда подавать документы?
893513
Sage #217 #893513
>>893504
Мы вам перезвоним!
#218 #893519
>>893485
SignalR
#219 #893595
>>893485

>В общем есть ли вариант в реальном времени получать этот словарь(Dictionary) из другого приложения(unity).


Самый быстрый способ - MemoryMappedFile
#220 #893599
>>893485
а брокер сообщений как же?
894657
#221 #893854
Как лучше реализовывать (де)сериализатор своего формата данных (желательно в декларативном стиле, что бы нужные поля классов можно было помечть и т.п.)? Есть примеры?
893866894037
#222 #893866
>>893854
Поля помечаются атрибутами. Для каждого поля и типа можно указать атрибут и прочитать его функцией MemberInfo.GetCustomAttributes.
Берешь объект, читаешь его поля/свойства функцией
MemberInfo[] members = type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
где, type - тип объекта получаемый функцией GetType объекта. Параметры можно использовать другие.

Дальше хуячишь всё это в кэш чтобы не читать многократно. Можешь не хуячить, тогда всё будет работать медленнее.
Значения полей при сериализации читаешь функцией FieldInfo.GetValue или PropertyInfo.GetValue. Пишутся поля функцией SetValue.
894073
#223 #894037
>>893854
Можешь исходники rest sharp глянуть на гитхабе, там есть минималистичный xml сериализатор десериализатор
#224 #894073
>>893866

Можно без рефлексии (какие нибудь деревья выражений или типа того) определить последовательность ссылок на свойства или поля?
894077
#225 #894077
>>894073

Уточню почему так. Сам сериализуемый класс находится в другой сборке и недоступен для правок. Я хочу написать шаблон который на вход берет сериализуемый класс и добавляет определение порядака и состав сериализуемых членов. Хотелось бы сделать это делкаративно, но очевидно атрибуты тут не проканают.
894306895022
44 Кб, 1112x294
#226 #894132
Прога читает цсв и конвертирует значения в даблы. Я ему даю -12.0 на вход для конвертации, а оно пишет, что неверный формат. Что я делаю не так?
894182894526
10 Кб, 330x338
#227 #894142
Суп антоны, подскажите с архитектурой приложения:
имеется пул объектов(изменяемый) одного типа по которому нужно пройтись и обработать. Над всем этим прикручен гуи (тип я думаю пока не важен). Проблема в обработке что она может занять до 5 секунд.
Первый вариант который пришёл в лоб - это обрабатывать объекты в другом потоке вызывая асинхронную обработку. Не сосну ли я в таком случае? Порекомендуйте материал по множественным колбэкам в одном потоке, мой рунглишь не позволяет корректно сформировать поисковый запрос.
Накидал картинку для примерного понимания.
894182
#228 #894182
>>894132
скорее всего для CurrentCulture разделителем дробной части является запятая

>>894142
я не понял, какие требования накладываются на этот пул? где ты там собрался соснуть и почему 5 секунд на обработку в твоем случае это много?
множественные колбэки в одном потоке - это задачи с продолжениями (Tasks, Continuations)
#229 #894279
При CRTP на C# какие операции применимы к аргументу генерика внутри генерика - только приведение this к нему?
894281
#230 #894281
>>894279
все, которые позволяют констрейнты генерика. как и без рекурсивного шаблона
894302894357
#231 #894302
>>894281

А, ну да.
#232 #894306
>>894077
Тогда хер его знает.
#233 #894357
>>894281
>>894281

Зачем ты пиздишь? Это на крестах так, а на шарпе констрен внутри генерика практически пустой.
894362
#234 #894362
>>894357
мая чет нипанимат где я напиздел
894370
#235 #894370
>>894362

Если рассматривать констрейн изолированно, то он вообще ничего об аргументе генерика не предполагает. Так что твоя фраза что можно все что позволяет констрейнт вообще ни о чем (с тем же усехом можно сказать пустое множество это множество которое ничего не содержит). А вопрос был явно в связи этого генерика с производным классом его юзающим.
#236 #894526
>>894132
Используй CultureInvariant при парсинге.
894566
#237 #894566
>>894526

Не хочу.
894569
#238 #894569
>>894566
Тогда не используй (:
#239 #894575
Есть поток, мне надо читать с него в разных местах, в произвольном порядке, при помощи разных BinaryReader'ов (например сначала 3 байта первым, потом 5 вторым, потом еще 10 байт первым, но что бы в главный поток уже стоял на курсоре 8 байт, и т.д.). Это будет работать или каждый ридер пашет по своему индексу независимо?
894596
#240 #894596
>>894575
Это можно сделать, но не нужно. Зачем тебе куча разных ридеров? Какова твоя задача?
894601
#241 #894601
>>894596

Да вся та же сериализация, это я писал выше. Хочу сериализовать внутри класса сримами, для рекурсивного вызова (если поле не простое а другой сериализуемый класс) нужно текущий стрим передать ему и что бы он с текущего места взял сколько ему надо, размазал по себе и вернул поток для дальнейшей сериализации.

Что не так в таком подходе?
894663
#242 #894612
Есть кто из Москвы, работодатель нашел меня и предлагает 120k, писать десктоп на C#, Winforms, WPF. Это нормально для москвы или мало для NET - программиста? Сколько из этого за хату отдавать?
#243 #894615
>>894612

> 120k


> C#


> десктоп


> Winforms


> приглашают в ДС из пердей


Ну не ведись анон, такая жирная разводка, на самых лохов ориентирована.
#244 #894622
>>894612
Смотря где жить будешь. От 20к (это всё ебеня из которых добираться до Москвы 1.5-2 часа) до всей зарплаты соответственно. Все цифры и карта есть в интернете. По еде можно укладываться и в тыщу в месяц картофан + крупы, хотя таких целей у тебя вроде и нет.
#245 #894635
>>894612
мидл?
#246 #894657
>>893599
Подробнее
#247 #894663
>>894601
да, собственно говоря, все не так
стоит начать с вопроса: зачем тебе множество потоков для разбора одного объекта? вопрос снимается, конечно, если у тебя исходных данных на гигабайт. если ты думаешь, что распараллеливать такую задачу это очень эффективно, то я тебе отвечу - не в твоем случае
894671
#248 #894671
>>894663

Поток один, это адаптеров над этим потоком несколько. А несколько их из-за рекурсивности сериализации вложенных членов. Т.е. метод Serialize каждого класса заводит свой адаптер типа BinaryWriter из BCL и сериализует члены, когда натыкается на непростой член пытается сериализовать его, а ему в свою очередь тоже придется поднять такой же райтер над потоком который ему дадут.

Я так и не понял что все не так? Если писать без потоков, то придётся ебаццо с индексами в массивах, что некрасиво.
894694
#249 #894694
>>894671
ааа, блжад, потоки - это Stream, а не Thread
я думаю, что индексами было бы проще и легче, учитывая, что тебе не придется в каждом разе прошагивать данные от начала до N. даже попросту сдвигая позицию ридера
894701
#250 #894701
>>894694

У меня была идея-фикс реализовать вообще без индексов, что бы всё было только в терминах потоков и адаптеров.
894721
#251 #894721
>>894701
ну довай, похвастаешься потом
#252 #894896
>>894612
Какой уровень? Сеньор - маловато. Для мидла охуенно.
#253 #895022
>>894077
Посмотри вот этот пример, должно подойти
http://joshclose.github.io/CsvHelper/#mapping
#254 #895061
class ResearchTeamCollection<TKey>
{
public ResearchTeamCollection(){ }
Dictionary<TKey, ResearchTeam> dictionary = new Dictionary<TKey, ResearchTeam>();
public void dictionaryAdd()
{
dictionary.Add(TKey, new ResearchTeam()); // как мне тут сделать ключ словаря независимым от типа?
}
}

Допустим, в другом классе я инициализирую так:
ResearchTeamCollection<string> coll = new ResearchTeamCollection<string>();
coll.dictionaryAdd();
895062
#255 #895062
>>895061

>coll.dictionaryAdd();


И что должно добавляться в словарь в качестве ключа по-твоему?
895067
#256 #895067
>>895062
Допустим, добавляю вот так:
coll.dictionaryAdd("First", new ResearchTeam());
Если бы был тип int, добавлял бы так:
coll.dictionaryAdd(1, new ResearchTeam());
Каким образом тогда мне записать функцию для всех типов?
895069895070
#257 #895069
>>895067
И что, ты будешь решать что именно добавить для данного типа через switch?
895076
#258 #895070
>>895067
Ладно уж, вот тебе решение.

public void dictionaryAdd(TKey key)
895076
#259 #895076
>>895070
>>895069
Работает, спасибо.
>>895069
Не, просто нужно было объявить для всех, а инициализировать для string. Задание такое.
11 Кб, 643x252
#260 #895104
Так. Что я делаю не так? Что за метод, вычисляющий ключ для объекта? Или я должен написать его сам?
895105895150
143 Кб, 662x567
#261 #895105
>>895104
Отклеилось.
#262 #895114
>>887274

metanit.com
Не благодари)
#263 #895150
>>895104
сам, что-то вроде хэш-функции. чтобы было так:
Add(ResearchTeam rt)
{ dictionary.Add(KeyDelegate(rt), rt); }
#264 #895280
Как из VS выложить существующий проект в репозиторий на github? Помоги, шарпач, я это в первый раз делаю и не понимаю, почему эта сука не работает. В VS подключился к своему аккаунту на гите, но не могу найти опцию захуярить в конкретный репозиторий весь проект. ЧЯДНТ?
Я понял, как создавать репозиторий из VS, как в него коммитить и запихивать изменения, но в упор не вижу функции залить уже существующий проект без изменений на github.
895283895285
#265 #895283
>>895280
ты из Team Explorer делаешь? там есть Sync, огромная кнопень
895286
1 Кб, 180x58
#266 #895285
>>895280
А это, блядь, что такое?
895286
#267 #895286
>>895283
>>895285
Да всё уже, можно сказать разобрался.
Просто мне нужно несколько проектов закинуть на гит, получилось закинуть 2 из N, а с 1 я где то накосячил, и проебал кнопку паблиш, теперь хуй знает где её найти. Как отвязать проект от репозитория или как закинуть на новый?
895288
#268 #895288
>>895286
Мда, я первый проект захуярил в visual studio team services вместо git, и теперь ору на гитхаб "ЧО ТЫ СУКА МОЙ ПРОЕКТ НЕ ПОКАЗЫВАЕШ?!".
Как сменить VSTS на github в team explorer'е?
895290
#269 #895290
>>895288
Самый простой способ - удалить скрытую физическую папку репозитория в корне проекта. Ну или разобраться с окном Team Explorer. Или как нормальный программист, поставить TortoiseGit.
895291
84 Кб, 450x338
#270 #895291
>>895290

> нормальный программист


> TortoiseGit

895294
#271 #895294
>>895291
Предлагаешь мне с терминалом гита ебаться? У меня память не резиновая еще и матюки гита запоминать.
895296895375
#272 #895296
>>895294
Терминал гита хотя бы глючит не так часто, как тулзы для работы с гитом в vs. Когда работал с гитом через tfs, то частенько ошибки выскакивали, когда запушить невозможно или запулить какого-то хуя, когда в терминале все ок работало. Короче рекомендую перекатываться на командную строку - сначала плюешься, а потом охуеваешь как раньше без этого жил.
мимо-проходил
#273 #895303

>тулзы для работы с гитом в vs


TortoiseGit не работает с VS, или я чего-то не знаю.

>рекомендую перекатываться на командную строку


Я и так некоторые извращенные команды выполняю через командную строку, потому что только через нее это можно сделать. Но для обычного сценария, например просмотр графа веток, с головой хватает TortoiseGit.
sage #274 #895334
>>887100 (OP)
уже давно хочу вкатиться в .NET на апворк, парни, подскажите, это реально вообще? Если да, то что посоветуете, как начать?
895335895460
#275 #895335
>>895334
случайная сажа
#276 #895375
>>895294

> матюки гита запоминать


git pull
git commit
git push
ебать тут много

> память не резиновая


ну, во-первых существует блокнот. и я ничего плохого не вижу записать что-то вроде <сохранить изменения git commit -m "comment message">
во-вторых, как же ты кодэ свой пишешь, если еще несколько литералов запомнить - это тяжкий труд? если у тебя сплошной if/else, мой вопрос снимается
895392
37 Кб, 988x691
#277 #895392
>>895375

>ебать тут много


Я часто еще переключаюсь между ветками, соединяю коммиты, откатываюсь до определенной версии, создаю и удаляю ветки, смотрю историю изменений определенного автора...

>существует блокнот


Есть у меня блокнот, там несколько МБ текста "важной" информации, которую надо не забыть, приблизительно в таком же формате.

>у тебя сплошной if/else


Угадал, пикрелейтед недавнего кода. Хотя я хорошо помню листинги нескольких программ на 1-3 миллиона строк кода.
895411
#278 #895411
>>895392
Это же F# на пике?
В чем разница между типами Statement и Block? Они же оба алгеброические типы?
мимо не шарю в фшарп
895415
#279 #895415
>>895411

>Это же F# на пике?


Да.

>В чем разница между типами Statement и Block?


Block содержит список Statement.

>Они же оба алгеброические типы?


Да.
895416
#280 #895416
>>895415
Хотя, если говорить более правильно, то:
Block - это record.
Statement - это discriminated union.
895422
#281 #895422
>>895416

>Block - это record.


>Statement - это discriminated union.


Что-то понятнее не стало, надо идти учить F#.

Вообще C# заебал своей топорностью, хочется укатиться на более гибкий-современный язык,
но блин как подумаю что все придется переписывать с функциональной парадигме - то сразу перехочиваетсяю
895423895425
#282 #895423
>>895422
что не так с гибкостью сишарпа, например?
895440
#283 #895425
>>895422

>Что-то понятнее не стало


https://fsharpforfunandprofit.com/posts/records/
https://fsharpforfunandprofit.com/posts/discriminated-unions/

>укатиться на более гибкий-современный язык


Так C# и есть гибкий и современный язык. F# его скорее дополняет, чем заменяет.
895440
38 Кб, 548x415
#284 #895440
>>895423

>что не так с гибкостью сишарпа, например?


Это то что сходу вспомнил:
- Отсутвие type inference для полей и свойтв (private Diction<string, string> _field = new Dictionary<string, string>())
- Отсутсвие primary contructor. В каждом классе приходится писать пик1
- if/else switch try/cache (тут не уверен) - не выражения и не возвращают результат
- нет нормальных (не Func<>) функциональных типов и функций на топ-левеле (язык вроде бы мультипарадигменный, но для любителей функциональшины у нас static methods)
- Notification проперти из MVVM (без кодогенеровов типа Fody) это ебучие портянки кода, которые средствами языка нельзя абстрагировать
- Нельзя делать свои DSL средствами языки. Я бы давно отказался от Xaml и писал все в коде, но это получается слишком избыточно.
- Отсутвие защиты он Null ссылок
- Отсутствие оператор let/val (это как var, только нельзя изменять)

>>895425

>Так C# и есть гибкий и современный язык. F# его скорее дополняет, чем заменяет.


Надо признать что C# за 15 лет уже накопил свое легаси и для .NET он тоже что и Java для JVM (конечно C# уделывает Java) - рабочая лошадка для энтерпрайза .

Только в JVM я могу свалить на какую-нибудь Scala/Kotlin/Groovy и там будет большое комьюнити,
а в .NET из популярных альтернатив это VB лучше убейте и F#
895450
#285 #895450
>>895440

> Отсутвие type inference для полей и свойтв


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

> primary contructor


эту штуку обещают уже второй релиз. чтож, очередной сахар

> if/else switch try/cache


хех, для if-else есть тернарный оператор. как можно использовать switch в руби мне, например, тоже понравилось. но вот что из кетч ты хочешь получить? или ты имеешь ввиду что-то вроде return { try this.Calcuate(); } catch { null; }?

> нет нормальных (не Func<>) функциональных типов и функций на топ-левеле


я полный ноль в ФП, что это все значит?

> защиты он Null ссылок


чтобы не вылезал NRE? и где тут плюс?

> оператор let/val


ну тут не знаю, сомнительно. есть readonly, с другой стороны почему бы и нет. но тоже обходился без подобного и это не мешало мне
895452
#286 #895452
>>895450

>я полный ноль в ФП, что это все значит?


Если сильно упрощенно, есть что-то типа наследования из ООП, только в функциональном стиле. Когда можно переиспользовать ранее написанный код. Одна из таких особенностей называется каррирование:
Func<int, Func<int, int>> sum = x => y => x + y;
Переиспользовать можно например так:
Func<int, int> add1 = sum(1);
Вот только на C# это очень криво выглядит, а некоторые вещи и вовсе нельзя делать.

>чтобы не вылезал NRE? и где тут плюс?


В ООП NRE падает в рантайме, в функциональщине - во время компиляции. Нулевая вероятность попасть NRE на лив.
895453895487
#287 #895453
>>895452

> в функциональщине - во время компиляции


вангую потому, что понятия NULL в ФП отсутствует в принципе?
895457
#288 #895457
>>895453

> вангую потому, что понятия NULL в ФП отсутствует в принципе?


Те же яйца, только в профиль. По умолчанию все типы не могут принимать null, надо явно говорить что вот этот тип может быть null. А везде, где надо достать значение такой переменной, надо писать if, который должен обязательно покрывать все ветления, иначе ошибка компиляции. Такой тип называется чуть иначе, но суть та же. Но и никто не запрещает использовать null в том же F#.
#289 #895460
>>895334
ну ребята
895462895466
#290 #895462
>>895460
изи гайд
1 выучить язык
2 выучить фреймворки
3 найти работу
#291 #895466
>>895460
https://youtu.be/Z-tLCQ2fW7I
Длительность всего 6 минут.
#292 #895481
Гуру впф и дата контекста, поможите понять.

У меня есть класс Log. Я в классе MainWindow пилю поле Log log = new Log.

После чего пилю в коде this.DataContext = log;
И могу использовать в xaml binding для получения полей из объекта log. Text="{Binding Data, Mode=OneWay}"
Вопрос - как использовать data binding из нескольких обеъктов. У меня например есть 2 текстбокса. Одному надо брать данные из объекта log, второй из объекта fonts.
В гугле везде примеры с использованием одного объекта, а как быть если тебе надо из нескольких в wpf отображать данные - вообще хз.

Я тут выше спрашивал совета по поводу написания класса Log, как мне порекомендовали смог сделать >>891410, но теперь пытаюсь сделать все более грамотно
895490895500
#293 #895482
Зачем сраный visual studio ставит 32 вонючих пакета, 30 из которых я при установке запретил ставить? При этом этого оказалось мало, пришлось еще и докачивать.
Это абсолютно идиотский подход к поддержке продукта.
895496
#294 #895487
>>895452
по поводу каррирования еще, есть же продолжения у задач. конечно, поднимать стейт-машины задля достижения такого стиля - тупость, но хоть так лол
#295 #895490
>>895481
привязать логкомпонкнт к свойству пью модели, которое, в свою очередь, использовать в двух разных классах
или использовать конвертеры при биндинге
895495
#296 #895495
>>895490
Если не затруднит, покажи что ты иммешь ввиду на простейших примерах в коде. На словах вообще не понял.
895498
#297 #895496
>>895482

>Зачем сраный visual studio ставит 32 вонючих пакета


А нафиг тебе VS, попробуй VS Code.

Для лаб или новых проектов на CoreCLR хватает.
#298 #895498
>>895495
показать что из двух вариантов?
с телефона, быстро не жди
895501
#299 #895500
>>895481
Пилишь вьюмодел. Делаешь два проперти для двух объектов.
895502895503
#300 #895501
>>895498
Оба было бы интересно посмотреть :3
#301 #895502
>>895500
Вьюмодель это промежуточный класс, в котором будут все необходимые мне классы. Этот промежуточный класс я задаю в this.DataContext, после чего смогу через точку обращаться к классам, внутри класса из xaml?
895510
#302 #895503
>>895500
Можно еще у Window.cs создать два публичных свойства VM1 и VM2, а в XAML нужным элементам установить нужный VM.
#303 #895510
>>895502
Как-то так пишу на коленке
public class ViewModel
{
Log log = new Log();
Font font = new Font();

public Log Log
{
get { return log}
set { log = value;}
}

public Font Font
{
get { return font}
set { font = value;}
}
}

в Window.cs
this.DataContext = new ViewModel()

в XAML
Text="{Binding Log.Data, Mode=OneWay}"
Text="{Binding Font.Data, Mode=OneWay}"
895521895524895586
#304 #895521
>>895510
Все, понял. Спасибо. У меня так часто бывает - когда читаю рекомендации где мне словами отвечают - вообще не вдупляю чего от меня хотят, но на код глянешь и с первого раза понимаешь все.
Еще раз спасибо, я с этими биндингами не один день пердолился пытаясь понять как их использовать и по тиху мозайка начинает складываться.
#305 #895524
>>895510
Алсо. Если мне потребуется mode=TwoWay, делать все так же, или есть свои нюансы?
895532
#306 #895532
>>895524
Твои классы(те же Log и Font, например) придется переделать вот так: хотя я вообще макака, может есть и другой адекватный способ
http://metanit.com/sharp/wpf/11.2.php
895534
#307 #895534
>>895532
Хотя можно реализовать INotifyPropertyChanged только во ViewModel и писать проперти для данных объекта.
public string Data
{
get { return log.Data}
set { log.Data = value; OnPropertyChanged("Data"); }
}
895590
#308 #895586
>>895510
Вообще когда начал пробовать сам еще 1 вопрос возник.
Раньше я создавал объект класса лога, делал this.DataContext = log, а дальше спокойно проделывалыв манипуляции с объектом. Например вызывал log.Write(string) который делал log.Data += string + "\n", после чего все это дело попадало в textBox_log.
Сделал я класс ViewModel. Сделал я this.DataContext = new ViewModel(), и обнаружил что не знаю как мне вызвать метод Write() объекта log, для того что бы поместить мне в лог нужную инфую.

Можно конечно сделать ViewModel viewModel = new ViewModel();
this.DataContext = viewModel;
После чего делать так
viewModel.Log.Write("some text"); Но выглядит как то не очень(хотя я вообще хз, может это и норма, я вообще ньюфаня в ооп и в жизни не писал ничего сложнее скриптов для автоматизации небольших задач с пк).
Как правильно и граммотно поступать то?
895600
#309 #895590
>>895534
За ссылку спасибо. Сам учусь по этому сайту, очень доступно и просто объясняет, но своими бы силами очень долго искал ответ. Это то мне как раз и нужно. Я делаю программу, в процессе работы которой в лог выводится результат работы. Юзер выбрал опции, кликнул кнопку, выполнился код и в логе отобразилась информация о проделаном и результатах. Тут то мне INotifyPropertyChanged и понадобится.
Но для начала пытаюсь научится статичный текст выводить вот, от простого к сложному.
#310 #895600
>>895586
Почитай про MVVM-паттерн, WPF заточен под него. Я так понял ты вызываешь метод из Window.cs(code-behind). Логику нужно выносить оттуда (Честно, я сам пока не до конца понимаю MVVM, все операции с данными и прочим я засовываю во тоже ViewModel).
895622895636
#311 #895622
>>895600
Благодарю, на том же метаните нашел годный материал по mvvm. Таки да, вся куча логики было в MainWindow.xaml.cs. Буду это все дело выносить оттуда.
#312 #895636
>>895600
viewmodel не должна содержать логики
895680
#313 #895680
>>895636
Ты путаешь c MVC, в которой ViewModel называют plain-data объект для UI. Другое значение - роль в MVVM паттерне, и там код вполне себе будет, но не бизнес-логика, это да. ViewModel должен по идее следить за изменениями в модели и преобразовывать их во вью, а так же за пользовательским вводом(изменениями view) и форвардить их в Model. 2-way binding.

мимодил
895724
#314 #895724
>>895680
Интересно, а генерация FullName из FirstName и LastName - это бизнес-логика, но что она забыла в ViewModel?

мимоиздеваюсь
895781895789
#315 #895781
>>895724
да у тебя и Console.Write это бизнес-логика
#316 #895789
>>895724
Ну я например понимаю что то что я пилю, можно сделать без применения всей этой еболы mvvm, wpf и т.д.
Можно было и на winform запилить спокойно и не ебать себе мозги, но у меня то целью являются не написание программы, а обучение. Программа как средство для изучения.
#317 #895812
То есть модель может содержать не только данные, но и функции?
895854
#318 #895854
>>895812
Даже в мвс модель может содержать функции
oche new-fag vopros #319 #895863
Как в студии сделать автоморматирование кода? Ну что бы нажал кнопку и все красиво стало.
895934
#320 #895934
>>895863
ctrl+k d
и
ctrl+k f
для всего документа и выделенного участка соответственно
#321 #895942
Народ кто может дать ссылочки на статьи/книги как правильно строить базы данных (MS SQL) для ASP.NET.
Интересует архитектура.

И еще такое:
У нас есть инет магаз "ВасяПупкин".
Зачем нам отделать в отдельный проект взаимодействие с БД
Пример:
ВасяПупкин.Domain -> собственно само взаимодействие с БД
ВасяПупкин.UI -> ASP.MVC проект.

Если можно все сделать в одном проекте ASP.MVC, а связь с бд организовать в Models
895956
#322 #895956
>>895942
как строить базы данных для все вряд ли отличается от того, как проектировать таковую для руби или еще какого говна

ты можешь вообще делать все в одном проекте или одном методе. цель - изолировать юайные штуки от логики, логику - от бд
#323 #895963
А здесь есть люди которые шарят в ASP.NET MVC или изучают его, можно было бы вместе поизучать его, если кому-то интересно)
895966896501
#324 #895966
>>895963
А ты няшный?
895968
#325 #895968
>>895966
Вот это сложный вопрос.

Я просто охуенен(нет)
#326 #895995
Как сгенерировать рандомное число типа double из промежутка [m; n], чтобы n было ВКЛЮЧИТЕЛЬНО?
896004
#327 #896004
>>895995
new Random().Next(0, 1) == 1 ? n : (double)new Random().Next(m, n)
896035896372
#328 #896035
>>896004
oh
my
goooood
896039
#329 #896039
>>896035
Какие проблемы? Работает? Работает.
896070
#330 #896070
>>896039
Разве Random().Next когда-нибудь достигнет единицы?
896080
#331 #896080
>>896070
Тогда Next(0, 2)
#332 #896082
Анон, выручай. Нужно запилить 2d игру с физикой в Windows Forms. Суть такова: есть машина, которая едет по поверхности(кривой) и может балансировать вперёд/назад. Что-то сродни gravity defied, но поверхность не ломаная линия. С чего начать и что курить? Буду рад любому совету.
896083896420
#333 #896083
>>896082
car game 2d sources download
#334 #896132
Шарпач, поясни, как переносить проекты с .dll библиотеками на другие ПК, чтобы не? Недавно столкнулся с проблемой, что когда я запустил солюшн на другом кудахтере, у меня отпали кхуям все референсы, они, видите ли, абсолютную адресацию имеют, несмотря на то, что при добавлении .dll копируются в папку с .exe
896133896145
#335 #896133
>>896132
блят, чтобы не добавлять референсы повторно*
#336 #896145
>>896132
Попробуй посмотреть здесь
http://metanit.com/sharp/tutorial/10.1.php

Еще у книжечках почитай на тему сборок, у Троелсена вроде неплохо написано.
#337 #896165
Анончик, помоги дауну освоить автомаппер. Не могу понять, почему этот код не хочет работать:
https://gist.github.com/anonymous/cdd24c2db8d2d10058f853e409238987?ts=4

Хочу при переходе Entity<->DTO перегонять int[] в строку вида "2,3,4,5" и обратно. Но маппинг работает только в одну сторону.

Я понимаю, что можно дёргать конструктор напрямую, вместо ForMember, но я хочу использовать это в другом проекте, там в конструкторе примерно миллиард аргументов и только один из них нужно по хитрому конвертировать.
#338 #896372
>>896004
Проблема в том, что это плохой рандом, ведь n будет в 50%
#339 #896420
>>896082

>Windows Forms


Зачем тебе Windows Forms?
896552
#340 #896501
>>895963
Тоже есть желание поизучать ASP.NET. Не против изучать сообща.
896547
116 Кб, 1471x581
212 Кб, 1054x865
#341 #896531
Посоветуйте по рефлексии.
Сделал простой атрибут.
Запилил класс с несколькими атрибутированными переменными. Потом функцию, которая берёт всё поля и их атрибуты и отправляет в конструктор другого класса.
WTF?!?!?!??!??!!!!!11
Вместо функций подставлял стринги и оно их отправляло.
Что пошло не так?
896610896626
#342 #896547
>>896501
Надо сразу фулстак изучать. Я вот курсы на плюралсайте смотрю и мне норм. Вот здесь можно бесплатную подписку на 3 месяца получить:
https://www.reddit.com/r/dotnet/comments/54i6to/good_aspnet_core_and_angular_2_tutorial/d82nbxc/

>>891871-кун
897073
#343 #896552
>>896420
А в чём ещё? Изначально надо было в консоли делать.
#344 #896610
>>896531
бросай все это дело, не твое это. ты ж даже вопрос понятно сформулировать не в состоянии
896615896622
#345 #896615
>>896610

>Не понял


@
повыёбываюсь
#346 #896622
>>896610
Вместо траллинга мог бы пояснить по скрину.
#347 #896626
>>896531

>Field_d


>DefAttr


>DefAttr.K


по твоему, мы тут экстрасенсы?
896637
#348 #896637
>>896626
Спасибо за отклик, тики отловил NULL и вроде работает. Такой момент, возможно ли имея имя поля в строке присвоить в экземпляр какое-либо значение?
896639
#349 #896639
>>896637
да, через рефлексию вообще все нах можно. вот только как делать я, естественно не помню. но помню, что все методы из .Reflection носят говорящие названия. ищи методы типа SetField() или SetValue()
26 Кб, 994x545
#350 #896709
Привет двач, возникла проблема с Visual Studion, а в частности с консолью NuGet. При запуске консоли выскакивает данное сообщение: An error occurred while creating the pipeline.
Гуглил - ничего.
Возможно ты анон сможешь помочь мне
#351 #896792
Ананасы, кто-нибудь на фрилансе бабки зарабатывает шарпом? Единственное направление, где это возможно это asp.net, но полистав всякие апворки пришел к выыводу, что это не самая популярная тема. На asp.net фрилансом вообще норм можно зарабатывать нормально?
897023
#352 #897023
>>896792
Если ты листал апворк, то видел достаточно индусов, которые вполне нормально гребут на asp.net. Он так то нужен как правило какому-нибудь энтерпрайзу, это же как джава, в идеале это не самый удачный стэк, но если ты его знаешь - то без работы офк не останешься.

мимо диванный, который внаглую перешёл на удалёнку вместо офиса
#353 #897073
>>896547

>курсы на плюралсайте


Какой конкретно курс?
897194897282
#354 #897194
>>897073
начни с любого
#355 #897282
#356 #897438
А есть какая-то конфа или чатик анонов по C#?
897903
#357 #897902
Двощ, выручай! Пытаюсь подключиться к БД в MS SQL через
System.Data.SqlClient.SqlConnection используя User ID и password. Вот только я нихуя не въебал, User ID - это логин для входа в MS SQL сервер? Если да, то как мне сделать так, чтобы задачи из под этого соединения выполнялись пользователем, созданным от этого логина? Просто пользователь состоит обладает определенными ролями, которые мне нужны, и вот чё то я не догоняю, как работать из C# в MSSQL именно от имени определенного пользователя, а не логина.
897950
#358 #897903
>>897438
Есть унылый телеграма чат, где общаются 8 человек из 100 присутствующих.
897999
#359 #897950
>>897902
1. На сервере создаешь логин с нужным именем и паролем.
2. Даешь нужные права на нужную базу.
3. На сервере разрешаешь логин через маздай аутентификацию И sql аутентификацию.
4. В коннекшен стринге прописываешь путь к серверу, имя бд и креденшиалы созданного пользователя.
5. ???
6. Идешь нахуй
897951897973
#360 #897951
>>897950

>System.Data.SqlClient.SqlConnection


И там похуй на чем ты подключение делаешь, хоть на камне высекаешь.
#361 #897973
>>897950
А разве можно дать какие-либо права на действия внутри БД логину? Я думал их можно дать только пользователям и ролям я совсем недавно в SQL
#362 #897994
Суп шарпаны,
хочу плотно заняться десктопными приложениями на WPF, стоит ли мне изначально возиться с прямой реализацией патерная MVVM или лучше накатить тулкит и изучать через него?
897995898511
#363 #897995
>>897994
Лучше вообще не лезь в WPF и его десктоп, а изучай что нибудь более современное. Ну или если очень хочется в десктоп - c++ Qt
897996899821
#364 #897996
>>897995
Кт СЛОЖНА, а C# уже как никак использую но в консольном виде. Интересна только Win платформа, поэтому WPF тут логичен и очевиден.
897998898052
#365 #897998
>>897996
Ну тогда готовься к подводным камням при расширении базовых контролов, через хуй пойми что работающим ресурсам и прочим весёлостям WPF, который не поддерживается официальными разработчиками с 2012.

Не знаю, о каком именно тулките ты говоришь, и чем он тебе поможет в реализации MVVM, но я бы советовал ещё на берегу вкурить, что предполагает под собой следование принципам MVVM, и как он реализуется в WPF.
898000
#366 #897999
>>897903
А там именно дотнетчики сидят, или вообще все?
#367 #898000
>>897998
Ты судишь по своему опыту или начитался статеек в этих ваших интернетах? Изучаю C# не так много времени и давно приглядывался к C++, но он жутко неудобен в том, что сделать в нём что-то неправильно как нехуй петь, а я не профессиональный программист и пишу в основном для своих нужд. Строгая типизация и управляемая память для меня значительное преимущество от которого не хочется отказываться.
898001899820
#368 #898001
>>898000
Из статеек вычитал только то, что WPF чуваки из microsoft не поддерживают с 2012.
По своему опыту высказал остальное. Из того, что больше всего рвало пердак, вспоминаются проблемы с комбинированием словарей ресурсов и стилей одновременно в одном контейнере ресурсов, черезжопное подключение обработчиков событий в словарях ресурсов к контролам внутри стилей, двойное срабатывание события DateChanged на DateControl'е или какой там стандартный, не помню уже при смене даты DatePicker, и одинарном при смене даты через текстовое поле на том же контроле из-за роутинга событий, кажется. исправляется костыльно, ну и прочие мелкие недоумения при использовании XAML'а, которые заключались в том, когда ты восклицаешь "да схуяли нельзя?!" там, где, казалось бы, всё должно работать. И то, что разочаровало меня более всего, в моей 600к мухосрани нет ни одной вакансии, ориентированной на WPF, да и вообще, как мне кажется, из за тенденции перехода на тонкие клиенты и мобильные приложения, десктоп умирает.
#369 #898002

>разочаровало меня более всего


>нет ни одной вакансии


Мне не актуально, значит впринципе можно заморочиться.
#370 #898052
>>897996
Мда. Сравнил хуй с пальцем. Васяноподелие qt на котором весь софт выглядит - привет 2000, либо wpf на котором запилена студия и офис.
Я конечно не хочу принижать заслуги qt в прошлом, но в данный момент это удел пердоликов. Прогрессивные люди выбирают c#.
898139898517
#371 #898139
>>898052
Последний Qt 5.6 очень даже няшный, но это не отменяет того факта что придётся учить целый новый язык.
#372 #898511
>>897994
Чо т я погуглил и люди действительно юзают WPF. Я думал, что майкрософт выкатят какую-то йобу вместе с .net core, но ничего не нашёл. UWP тоже не особо взлетел.
http://www.telerik.com/blogs/survey-report-the-dotnet-developer-of-2016

Если видишь вакансии - так то можно и изучить, но это всё такое.
36 Кб, 1630x558
#373 #898517
>>898052

Привет из будущего
898531898546
#374 #898531
>>898517

>Черно-белые логотипы, цветов еще не изобрели


>Даже не черные - бледно-серые, краска в дефиците


>будущее


На хуй такое будущее
898641
#375 #898546
>>898517

>ABB


>QT


Использую WPF.
Мимо ABB-кун
#376 #898641
>>898531
так ты даун, это стили такие применены - когда наводишь на лого картинка приобретает оригинальные цвета. короче яебу дивелапер
898644
26 Кб, 996x352
#377 #898644
>>898641
Ну вот я навел на лого и нихуя ничего не приобрело, ты пиздабол и даун.
898645898646901747
#378 #898645
>>898644
Бля курсор не отображается на принт скрине.
#379 #898646
>>898644
ну подумаешь подобосрался чутка, чо ты ругаешься, макакен
#380 #898852
Как правильно диспозить классы которые асинхронно захватывают ресурсы?
898853
#381 #898853
>>898852
в коллбэке эсинхронной операции?
898854
#382 #898854
>>898853

А в самом Dispose() чего делать, ждать пока завершиться или послать запрос отмены и идти дальше?
898855
#383 #898855
>>898854
ну так ты не вызывай диспоуз пока не завершится асихнронная операция
898857
#384 #898857
>>898855

В штатном выполении я и не собираюсь, но если юзер переходит на другю страницу например, тут так просто не отделаешься.
898859
#385 #898859
>>898857
попроси не переходить
#386 #899038
Двач, PAMAGI. У меня проблемы с взаимодействием MSSQL и C#. В коде C# вызываю хранимую процедуру, которая выполняет select'ы. Результаты работы хранимой процедуры записываю в DataSet из ADO.NET через SqlDataAdapter. НО! Если у пользователя, чьи данные указаны в строке подключения, не хватает прав, то не генерируется никаких исключений. Следовательно, если у пользователя нет прав на выполнение процедуры, я даже никак ему об этом сообщить не могу, томушо исключение из MSSQL не подхватывается ни дата адаптером, ни SqlConnection'ом.
Как быть? Мб есть альтернативы DataAdapter'у?
899048899064
#387 #899048
>>899038
А всё, отбой. У SqlConnection есть события, которые мне подходят.
sage #388 #899064
>>899038

>DataSet из ADO.NET через SqlDataAdapter


У тебя древнее говно к жопе прилипло! В ADO.NET нет DataSet, который из .NET Framework 2. Чего ж ты на первой версии не пишешь, некрофил?
899073
#389 #899073
>>899064
Тише, тише. Я мимостудент, и нам не рассказывали про EF, а мне слишком впадлу им заниматься для моих нужд. И я думал, что DataSet он родом из ADO.NET а может и нет, я хуй его знает. Беру его из using System.Data. Это разве не ADO.net?
899079
sage #390 #899079
>>899073
Если переводить на русский термины, есть "подключенные" и "отключенные" классы. Первые работают с базой данных, вторые работают не с базой данных и нахуй не нужны.
Так вот: первые - Connection, Command, DataReader, DataAdapter;
Тогда как вторые DataSet, DataTable, DataRow, DataColumn. Это пиздец какие ебанутые классы. Часть простых вещей без костылей не сделать.
Первые классы даже сейчас используются, например где важна скорость.
Вторым - есть много замен, или они вообще не применимы к задаче.
#391 #899541
Как работает добавление кастомных структур в генерик List<>, они все будут как массив в стеке или в куче, а лист будет хранить только ссылки?
899567
#392 #899567
>>899541
List<T> будет вместе со всем прочим хранить ссылку на T[], который, в свою очередь, будет представлять собой сплошной ряд объектов в куче (это исключая случай, когда массив будет достаточно велик дабы попасть в LOH. в таком разе ряд будет не очень сплошным, но это уже совсем другая история)
899675
#393 #899675
>>899567
Физически list как массив в памяти представлен?
Все данные находятся последовательно, а при добавлении остальное сдвигается?
899692
#394 #899681
Есть желающие подработать? Заранее прошу особо говном не закидывать, знакомый который сам обычно всем с курсачами помогал слег в больницу и попросил найти в интернетах кого нибудь что бы курсач запилить, довольно простенький на asp.net. Черканите на мыло temp600670I00ANUSmai\-(lPUNCTUMr>EWu если кого заинтересует с предложениями по цене.
https://docs.google.com/document/d/1APjX_IMyCsODb2JFJFAype-8dj4xusR5hug0iG-A9Jo/edit?usp=sharing
Еще раз извините за оффтоп и не кидайтесь говном.
#395 #899692
>>899675
тебе говорят, что List сам по себе не содержит объектов коллекций, но ты за свое блять
899803
#396 #899803
>>899692
Я не он, и у меня вопрос как физически представлен в памяти лист. Это же не линкедлист в котором каждый элемент хранит ссылку на предыдущий и следующий. Как он хранится в памяти?
899844
#397 #899820
>>898000

>Строгая типизация


C++ примерно так же строго типизирован как и шарпик. Гц удобная штука, да.
#398 #899821
>>897995
Qt ещё жив?
899823
#399 #899823
>>899821
Например, steam.
899826
#400 #899826
>>899823
Лол и battle.net десктоп-прожка.
#401 #899844
>>899803
как и любой другой ссылочный тип - имея под боком все значимые типы и интовые ссылки на ссылочные типы в куче в границах, обозначенных размером типа
899887
#402 #899887
>>899844
Тут нашел http://stackoverflow.com/questions/29898518/is-a-generic-list-stored-contiguously-in-memory
Что list содержит массив типа T
А при добавлении
If Count already equals Capacity, the capacity of the List<T> is increased by automatically reallocating the internal array, and the existing elements are copied to the new array before the new element is added.

If Count is less than Capacity, this method is an O(1) operation. If the capacity needs to be increased to accommodate the new element, this method becomes an O(n) operation, where n is Count.

Не совсем понятно что именно значит reallocating the internal array
Это выделение памяти под новый массив и копирование туда данных с новым добавленным элементом?
Тогда может для некоторых List заранее Capacity задвать если знаешь что List будет расти чтобы избежать лишних выделений памяти?
899905899932
#403 #899905
>>899887
Именно, задавая capacity избавляешься от ненужных реаллокаций
#404 #899932
>>899887

>Что list содержит массив типа T


соу слоу, я это написал первым ответом, но зачем читать слова с первого раза
#405 #900059
Ананасы, кто нибудь работал с PostgreSQL из под c#? Какой API/Framework посоветуете для вызова процедур в БД на PostgreSQL?
900188900256900295
#406 #900188
900211900217
#407 #900211
>>900188
ef в целом так себе вариант
тем более для вызова фактически raw sql можно придумать и ченьть получше
900217
#408 #900217
>>900188
>>900211
Наткнулся на Npgsql.EntityFramework
Кто нибудь имел опыт работы с ним?
900253
#409 #900253
>>900217
Никто с ним не работал, потому что он не для людей. Если у тебя хранимки в БД - просто пиши sql запросики
#410 #900256
>>900059
Можешь попробовать linq2db - в отличии от EF не такой тяжелый. Сам процедурки не вызывал, но поддержка всего этого есть.
16 Кб, 1028x155
#411 #900257
Что делать с сучарой с пикрелейтед? Чо он так много жрет?
#412 #900295
>>900059
dapper
#413 #900470
Что скажете про М.Фленов-"Библия С#"?
Начало можно дрожать, конечно-оно совсем ньюфажное.
900475900507
#414 #900475
>>900470
ты ж сам все сказал, че спрашивать-то?
sage #415 #900507
>>900470
Если не можешь/не хочешь читать книги на английском - тебе в профессии делать нечего.
900510900633
#416 #900510
>>900507
Элитка, не рвись. Начинать можно и родного языка, рунглишь нужен для того, чтобы быть на острие технологий.
900514
#417 #900514
>>900510
Ух ты, самоподдув в 2016-то году.
24 Кб, 400x242
#418 #900518
>>887100 (OP)

>.NET THREAD #5 (C#/F#/VB)


>В шапке ни одного ресурса по F#



Шо за хуйня?

Дайте годных книг/ресурсов (кроме fsharpforfunandprofit.com)
900544
#419 #900544
>>900518
Его сейчас вообще кто-то использует? Вакансий по-моему особо нету нихуя вот и не нужен.
900547900632
#420 #900547
>>900544
много вакансий C#/F# девелоперов, шо ты рассказываешь тут
#421 #900615
Как быстрее заполнить список структур: создавать через new прямо в аргументе или за пределами цикла создать локальную переменную-буфер, заполнять ее поля и уже ее передавать в Add?
900623
#422 #900623
>>900615

в коде:
1)
var l = new List<Struct>();
var s = new Struct();
for(int i =0; i < 1000; i++)
{
s.a = 3;
s.b = 1;
l.Add(s);
}

или

2)
var l = new List<Struct>();
for(int i =0; i < 1000; i++)
{
l.Add(new Struct() { a = 3, b = i});
}
900675
#423 #900631
Шарпаны, а где почитать про управление памятью в управшляемой кучи.
Те есть класс, в котором тоже ссылочные типы. Как их лучше всего создавать или нет никакой разницы? Созданные в методах ссылочные типы будут сохранять свою жизнеспособность на всем протяжении сохранения ссылки?
900675
157 Кб, 955x1022
#424 #900632
>>900544

>Его сейчас вообще кто-то использует? Вакансий по-моему особо нету нихуя вот и не нужен.



> 2016


> учить язык только по востребованности на рынке


Чувак ты не шаришь.

Его надо выучить хотя бы что бы расширить свое сознание разных подходов проектирования.
После него даже твой C# код станет лучше и чище.

Да и вообще, ты что безработный школьник или не в состояние два язык запомнить?
900636900638
#425 #900633
>>900507
Петуха забыли спросить.
Спокойно читаю документацию на иглише, вся системы и весь софт на инглише. Но при этом - если есть вменяемая ру альтернатива документации или книги буду читать на русском. Ибо мозг раз в 10 меньше будет уставать. Для того что бы изучать английский, есть курсы, спец книги и спец сайты, документацию я читаю совсем для другого, и на русском языке я куда быстрее и куда больше смогу усвоить.
#426 #900636
>>900632

>После него


Тебя перестанут брать на работу.
900642
#427 #900638
>>900632
Я в первую очередь учу язык из соображения его востребованности. Для меня это всего лишь способ заработка. Оставь свои мантры для красноглазиков.
900643
95 Кб, 954x904
#428 #900642
>>900636
С работой как раз все ОК. Пишу тырпрайз на c#, для себя учу f#.

Ты только глянь как охуенно выглядит "качалка webm и картинок с двачей"
язык учу пару дней
900675
11 Кб, 196x200
#429 #900643
>>900638

>Для меня это всего лишь способ заработка


Вся суть codemonkey.
900646
#430 #900646
>>900643
Как-будто что-то плохое.
#431 #900675
>>900623
быстрее инициализировать список можно только указав Capacity в конструкторе. то, шо ты привел тут будет однозначно одинаково по скорости ибо для Add() значение структуры будет копироваться

>>900631

> где


троелсен, рихтер, msdn

> Как их лучше всего создавать или нет никакой разницы


что значит как? или кого "их"?

> Созданные в методах ссылочные типы будут сохранять свою жизнеспособность на всем протяжении сохранения ссылки?


в случае, если это локальная переменная онли и никуда не пойдет дальше, до первого сбора мусора. в противном случае это зависит от времени жизни объекта, в котором он используется, и его поведения

>>900642
это решарпер подсвечивает typename1 -> typename2? или 2015 студия?
900684900702
#432 #900684
>>900675

А разве не будет так, что в первом случае он один раз выделит перменную в стеке, из которых на каждом Add будет копировать значение, во втором случае на каждом Add сначала будет создан временный объект (в стеке?) и уже из него производиться копирование?
900741
#433 #900702
>>900675

>это решарпер подсвечивает typename1 -> typename2? или 2015 студия?


Это Visual Studio Code с установленным расширением для F# (и кстати core clr приложение)

2015 студия вроде этого делать пока не умеет,
а решарпер вроде и не собирается F# поддерживать.
#434 #900727

>Стек на основе односвязного списка. Операции протолкнуть и вытолкнуть.



Подскажите, куда хоть капать-то? Лаба немного на волоске уже, а это совсем никак не могу понятьосвоить.
900741900744
#435 #900741
>>900684
не, ну так-то будет, но это не сказать шобэ оптимизация, даже микро
http://pastebin.com/MdTbgJWY
начало тела цикла во втором случае - это IL_0013. конечно пришлось добавить еще пару строк, где происходит первая инициализация Struct. не то, чтобы я сильно знал MSIL, но очевидно, что фактическая разница - в двух инструкциях. учитывая то, что выделение памяти это просто наращивание указателя, выигрыша ты тут не получишь.

>>900727

> протолкнуть


копать в структуры данных, а именно - в стек и в связный список. еси знаешь шо это такое и зачем нужно, то проблем не должно быть
а если нет, то полистай Essential Algorythms
#436 #900743
>>900741
Придётся осиливать и заниматься быстрым самообучением, эх. Спасибо!
900747
#437 #900744
>>900727
push() - сохраняет элемент в начале списка
pop() - возвращает значение из первого элемента списка и удаляет его
900910
#438 #900747
>>900743
в той книге на псевдомове программирования разобран пример построения стека на основе связного списка. не думаю, что ты сильно туп дабы не осилить это со второго раза. а если да, то ничем тебе не могу помочь
#439 #900752
Как в вижуал студио включить отображение адреса переменной?
900812
#440 #900812
>>900752
а так можно?
#441 #900818
Шалом сишарперы
Завтра нужно сдавать курсач и гуглится моя проблема как-то не так
суть в чем, есть пикчебокс
pictureBox6.Image = Image.FromFile(@"C:\Users\User\Desktop\History Test\History Test\History Test\bin\Debug\test\vopr\vopr" + numq + ".jpg");
как можно переделать путь к, чтобы он был относительно папки с самой программой? без вот этих дисков, юзеров и.т.д
а то прога не то что с флешки, с другого пользователя на пеке не запускается))))))
900825
#442 #900825
>>900818
"папканейм/файлнейм"
будет гуглить файл относительно директории запуска приложения. в твоем случае это с:/всяхуйня/бин/дебаг
900831
#443 #900831
>>900825
Он прям сам загуглит? Класс
Ща попробую, спасибо
#444 #900908
>>900741

wow, ты ради меня декомпиляцию проводил.
900912
#445 #900910
>>900741
>>900744

>2 омежки помогают быдлу


Хорошие мальчики, послушные. Сейчас будете между пальцев ног лизать.
900911900912
#446 #900911
>>900910
Как что-то плохое :3
#447 #900912
>>900908
та мне чот самому интересно стало, будет ли разница

>>900910
ебанат штоле?
901119
#448 #901019
Шарпаны, что после The C# Player's Guide, чтобы в веб вкатиться читать?
901647
#449 #901116
>>900741

Это дебажная сборка? Может оптимизатор вообще без временного объекта обойдётся?
901118
#450 #901118
>>901116
да, дебаг. я хотел еще с optimze скомпилить, но суть-то была в поиске разницы
#451 #901119
>>900912
Ебанат здесь ты и безграмотная моча-пидорок, которая посты трет. Конечно, неприятно ощущать себя безграмотным дебилом, надо пост потереть.
(Автор этого поста был забанен. Помянем.)
#452 #901407
Сишарперы.
Нужно копировать файлы определенных расширений из одной папки в другую (7 разных типов файлов).
GetFiles() принимает только одну маску.
Как лучше получить сразу все типы файлов?

http://pastebin.com/wR6u9vN5
901410901416
#453 #901410
>>901407
Написать функцию, принимающую массив масок? И вызывавать GetFiles для каждой?
#454 #901416
>>901407

> GetFiles() принимает только одну маску


разве?
по-моему, у них делимитер - это символ |
901417
#455 #901417
>>901416
таки нет, не для этого случая
интернеты говорят по-разному - от конкатенации результатов до фильтрации всех файлов в директории
901446
#456 #901446
>>901417
Таки что лучше использовать? Файлов очень много. Что будет менее затратно?

http://pastebin.com/ZmvV5v3p
901484901525
#457 #901484
>>901446
а v2 и v3 чем-то отличаются лол?
еси ты явно указываешь IEnumerable<FI>, как в версии2, то лучше использовать метод EnumerateFiles. вообще, смотря

> Файлов очень много


что ты подразумеваешь. если файлов много, а под один фильтр попадет, в лучшем случае 5-10%, то лучше вариант номер раз. если же бОльшая часть общего контента окажется в результирующей выборке, то тащи из DirectoryInfo все. универсального рецепта нет в этом случае
902134
#458 #901525
>>901446
Лучше вместо GetFiles() использовать EnumerateFiles() + Where().
901531902134
#459 #901531
>>901525
и вместо string[] HashSet<string>, хотя если всего 2 расширения, не знаю даст ли это хоть сколько заметный прирост.
902134
#460 #901607
>>890447
Слушай Лысого сука и будешь С# богом.
#461 #901608
>>890993
Почему бы и нет?
#462 #901609
>>894612
Копейки.
#463 #901644
Компадрес, никто не сталкивался недавно с проблемой с NuGet в VS2015? У меня вот пикрелейтед уже весь день выскакивает.
На данный момент пробовал:
1. в настройках фаервола создал правило для devenv.exe на все входящие/исходящие подключения
2. удалил/устанавливал повторно NuGet
3. Пробовал использовать адрес NuGet'овского CDN для VS2013
ничего не помогает. Гугол тоже молчит. Раньше NuGet работал (не помню, когда в последний раз использовал, но я помню, что работал).
901645902110902115
32 Кб, 1032x611
#464 #901645
>>901644
пикрелейтед проебал
902110902115
#465 #901647
13 Кб, 646x384
#466 #901664
Насколько сложно забацать в WinForms контрол по типу пикрелейтед? По сути это помесь TreeView и CheckedlistBox, за исключением того, что детки разворачиваются не полностью на весь тривью, а в листбоксе. Ну и мне достаточно одного уровня вложенности.
901683
24 Кб, 740x161
#467 #901683
902170
#468 #901747
>>898644
Господа, поясните за локатор в MVVM Light, как его использовать и зачем? не могу найти руководство для совсем дибилов а описания для понимания не хватает.
#469 #901937
Вопросы по оптимизации.
Знаю что система автоматически выносит объявление переменной за цикл. Такой вопрос, если у меня есть в цикле вызов метода, будет ли она также выносить объявления конст/обычных переменных за рамки данного цикла, или нет?
транслируй в MSIL и смотри сам
902072
#470 #902072
>>901937

> выносит объявление переменной за цикл


ты про i в цикле (for var i = 0...)?

> если у меня есть в цикле вызов метода, будет ли она также выносить объявления


причем тут метод? я четота не догнал?

> выносить объявления конст


константы находятся в метаданных, вангую, что такая же ситуация характерна и для методов (но не уверен)

> обычных переменных за рамки данного цикла


чуть выше я ildasm-ом для другой ситуации приводил листинг. так там никакого выноса переменной, что создавалась внутри цикла, не было
902091
#471 #902091
>>902072
Сейчас разверну что я имел ввиду.
Есть такой например код цикла:
for(...) {
var variable = 333;
...
}

После трансляции, он будет таким(по смыслу):
var variable = 333;
for(...) {
...
}
Не то, чтобы переменная variable поменяет свою область видимости, а в плане что инициализация будет происходить единоразово.

А затупил я над следующей ситуацией:

for(...) {
someMethod();
...
}

... someMethod(){
var variable = 333;
...
}
Дак вот какого будет поведения переменной variable, вынесется ли её инициализация до цикла или нет.
#471 #902091
>>902072
Сейчас разверну что я имел ввиду.
Есть такой например код цикла:
for(...) {
var variable = 333;
...
}

После трансляции, он будет таким(по смыслу):
var variable = 333;
for(...) {
...
}
Не то, чтобы переменная variable поменяет свою область видимости, а в плане что инициализация будет происходить единоразово.

А затупил я над следующей ситуацией:

for(...) {
someMethod();
...
}

... someMethod(){
var variable = 333;
...
}
Дак вот какого будет поведения переменной variable, вынесется ли её инициализация до цикла или нет.
902103
#472 #902103
>>902091

> вот какого


какое*

Будь это плюсы, я бы переопределил оператор присвоения и посмотрел как оно работает. Но в шарпике нельзя трогать данные операторы. Точно знаю что даже старые компиляторы плюсов, оптимизируют первую ситуацию, для системных типов. На счет второй уже не помню.
902109
#473 #902109
>>902103
Сук, не дописал.
Я вообще не бум бум за дотнетовский байткод, чтобы в нем посмотреть результат трансляции простого примера, думал может знает кто. Если нет, то к выходным может сам осилю. Прочекать поведение для базовых системных типов и пользовательских соответственно.
902118
#474 #902110
>>901644
>>901645
Б А М П
А
М
П
902114
#475 #902114
>>902110
Я сейчас конечно адово шуткану, но попробуй запустить студию из под администратора.
Мимо SharpDevelop-холоп с вопросами трансляции.
902116
#476 #902115
>>901644
>>901645

М П
А Б П
Б Б А М П Б А
А М А
М М П Б А М П
ПБ Б П
#477 #902116
>>902114
Запускал. Nyet, всё то же самое.
902124
#478 #902118
>>902109
первая ситуация - это не более чем оптимизация статического конпелятора.
нащщот второй от ситуации и того, как метод будет использоваться и какова будет статистика метода/цикла - может включиться встраивание метола, может повторное использование кадра стека, может еще чота. я однозначного ответа на это не могу дать, но можно попробовать поэкспериментировать
902124
#479 #902124
>>902116
Идея нумер два. Вместо https вкорячь http. Основы гугл-Fu https://github.com/NuGet/Home/issues/2880

>>902118
Принято. Я реанимирую свои познания по программированию, и вот при работе со строками задумался над оптимальными реализациями своих методов. Будет ли он строки выносить, или нет. Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же, для констант свое поведения прописано. Короче, не понятно мне. К выходным может проверю какие оптимизации происходят при компиляции
902127902163
#480 #902127
>>902124
Nyet. Та же самая ошибка, только порт указан 80 вместо 443
#481 #902134
>>901484
Общее количество файлов 11566. В выборку попадает 7014. Получается в моём случае лучше использовать версию 2, так как в выборку попадет более 60%?

>>901484
>>901525

>явно указываешь IEnumerable<FI>, то лучше использовать метод EnumerateFiles


>Лучше вместо GetFiles() использовать EnumerateFiles() + Where().


Я как понял, EnumerateFiles() это lazy-вариант GetFiles().
Есть ли разница, с чем использовать EnumerateFiles() с FileInfo[] или IEnumerable<FileInfo>?
Какие подводные камни, если использовать EnumerateFiles() с FileInfo[]?

>>901531

>хотя если всего 2 расширения


Не 2. 7 различных типов файлов.
902163
#482 #902140
Есть семейство наследников генерика:
public class G<T> where T:Base
{
public T Prop {get;set}
}

Как правильно работать с разными классами этого семейства (т.е. T принимает разные значения) в обобщенном стиле? Я ввёл интерфейс c cвойством базового типа:

public interface IGBase
{
Base PropBase {get;set}
}

и добавил реализацию свойства в исходный генерик:

public base PropBase
{
get { return Prop; }
set { Prop = (T)value; }
}

Всё правильно сделал? Оно работает, но есть ощущение говнокода и нарушения высших принципов проектирования.
902163
#483 #902161
Вечер в хату. Понимаю что есть раздел GD. Но стало интересно есть тут unity-шарписты? Которые пояснят примерно на пальцах, в чем именно заключается программач играча в юнити? Что именно используется из языка? Как разделяется клиент-сервер? Сам я яву ковыряю про структуры данных. Интересен минимум знаний нужный чтобы запилить с готовым набором моделей, анимации и прочего. 2д вид сверху мультиплеерный шутер =)
#484 #902163
>>902134

> файлов 11566


> в выборку попадет более 60%


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

> EnumerateFiles() это lazy-вариант GetFiles()


ох, если бы
EnumerateFiles() - это:
return FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);

GetFiles() - это:
IEnumerable<FileInfo> enble = FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
List<FileInfo> fileList = new List<FileInfo>(enble);
return fileList.ToArray();

субъективно мое мнение - для 12к файлов использовать несколько EnumerateFiles() с последующей конкатенацией. если расширений будет добавляться, тогда пичаль, надо будет сравнивать бенчмарки

>>902124

> Будет ли он строки выносить, или нет


ну все зависит от использования этих строк. не value/reference type влияет на такие вещи

> Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же


как-то сильно по-школьному. строки - это массив чаров, правильнее говоря - char*. вроде бы как через unsafe они вполне себе изменяемы. дело в том, что нет безопасных прямых средств для работы со строкой как с изменяемым объектом. следовательно,

> для констант свое поведения прописано


тут не канает

>>902140
есть интерфейс, работающий изначально с Base. есть дженерик-класс, работающий от конкретной реализации Base в отдельно взятой ситуации. т.е. если:

public class Impl : Base {}

и ты используешь оба варианта:

((IGBase) someobj).PropBase = new Impl()
и
new G<Impl>().Prop = new Impl(),

то в первом случае потребитель интерфейса нихуя не шарит в том, Impl это либо другая реализация, в то время, как G<> четко знает, что работа производится с нужной реализацией. соответственно, тебе в первом случае нужно будет явно кастить и потенциально обсираться с InvalidCastException.

но в чем вопрос, я не понял. и нахуя делать отдельно интерфейс и абстракцию, причем по-разному
#484 #902163
>>902134

> файлов 11566


> в выборку попадет более 60%


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

> EnumerateFiles() это lazy-вариант GetFiles()


ох, если бы
EnumerateFiles() - это:
return FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);

GetFiles() - это:
IEnumerable<FileInfo> enble = FileSystemEnumerableFactory.CreateFileInfoIterator(FullPath, OriginalPath, searchPattern, searchOption);
List<FileInfo> fileList = new List<FileInfo>(enble);
return fileList.ToArray();

субъективно мое мнение - для 12к файлов использовать несколько EnumerateFiles() с последующей конкатенацией. если расширений будет добавляться, тогда пичаль, надо будет сравнивать бенчмарки

>>902124

> Будет ли он строки выносить, или нет


ну все зависит от использования этих строк. не value/reference type влияет на такие вещи

> Ведь строки это не совсем простой тип. Опять таки все строки в шарпике это константы же


как-то сильно по-школьному. строки - это массив чаров, правильнее говоря - char*. вроде бы как через unsafe они вполне себе изменяемы. дело в том, что нет безопасных прямых средств для работы со строкой как с изменяемым объектом. следовательно,

> для констант свое поведения прописано


тут не канает

>>902140
есть интерфейс, работающий изначально с Base. есть дженерик-класс, работающий от конкретной реализации Base в отдельно взятой ситуации. т.е. если:

public class Impl : Base {}

и ты используешь оба варианта:

((IGBase) someobj).PropBase = new Impl()
и
new G<Impl>().Prop = new Impl(),

то в первом случае потребитель интерфейса нихуя не шарит в том, Impl это либо другая реализация, в то время, как G<> четко знает, что работа производится с нужной реализацией. соответственно, тебе в первом случае нужно будет явно кастить и потенциально обсираться с InvalidCastException.

но в чем вопрос, я не понял. и нахуя делать отдельно интерфейс и абстракцию, причем по-разному
902167902184
#485 #902167
>>902163
не дописал

CreateFileInfoIterator делает соме маджик. на косой взгял на реализацию, там нечто вроде state-machine как для yield блоков. если это действительно так, я бы советовал по возможности юзать этот вариант. а если нет и при первом обращении итератора формируется конечная коллекция, то хуй знает
#486 #902170
>>901683
Это я знаю, что можно тривью с чекбоксами сделать. Я не хочу что бы ветка тривью раскрывалась в километровую простыню, так как сабайтомов может быть более 1000. А так бы я отображал в листбоксе, присобачил бы туда виртуализацию и все было бы чики бамбони Пока сделал открытие сабайтемов в отдельном окне с чекедлиствью.
#487 #902184
>>902163

То что я назвал Base это иерархия классов модели, там лежат данных и я эти классы не контролирую, не могу ничего поменять. Мне надо к каждому такому классу прикрутить сериализацию, что бы потом гонять их по разным каналам. Идея была в том, что бы создать базовый генерик с параметром класса наследника Base, там будет общая инфраструктура, каждй наследник генерика будет имплементировать сериализацию. Было все хорошо, сами генерики выглядят красиво, но понадобились функции работы с наборами разных наследников этого генерика, так что пришлось выделять интерфейс. Например требуется записать список наследников Base, я по ним получаю из фабрики набор соответсвующих генериков-обёрток приведенных к интерфейсу, но их свой свойство Prop только что из фабрики ещё чистое, его нужно заполнить исходным Base переданным клиентом. Вот тут и возникает необходимость апкаста. Я так понял это неустранимо, в моем решении нравится что апкаст только один и изолирован в одном местею. Но в целом всё кажется каким-то кривым.
бамп отчаяния #488 #902381
902392902627
#489 #902392
>>902381
Сам напиши, это просто.
902446
18 Кб, 545x254
22 Кб, 484x570
13 Кб, 350x425
#490 #902398
Шарпаны, не прикручивается датаконтекст, что может быть неправильно?
902407
#491 #902407
>>902398
Если ты хочешь DataContext в XAML'е заводить, то нужно в ресурсах не раньше grid'а объявить объект твоего VM с ключом, и потом самому гриду DataContext присваивать через
...DataContext="{StaticResource myVM}" />
А так он у тебя нихуя не увидит, ты ведь даже не объект какой то привязываешь, а просто название класса.
902408
#492 #902408
>>902407
Сук, так вот почему у меня конструктор VM не вызывался. А как правильнее всего сделать?
902452
#493 #902446
>>902392
и все-таки https://msdn.microsoft.com/en-us/library/ms230818.aspx эти колбэки использовать?
других стандартных средств профилирования Core я вообще не видел
11 Кб, 422x198
8 Кб, 301x205
#494 #902450
Так, нашел два рабочих варианта. Может кто пояснить за каждый из них? Второй выглядит намного проще и логичнее.
#495 #902452
>>902408
Ну, формально, в WPF предполагается как можно больше кода, связанного с View и ViewModel оставлять в XAML'е. Однако, довольно проблематично объявлять VM в кзамле, если у тебя конструктор с параметрами. я вот ващпе не парюсь и в c# коде объявляю.
одна строчка роли особой не играет.
#496 #902489
Поясните за разницу между объектом и инстансом. Смотрел в одном видосике, что для шарпа объект это статические мемберы в хипе, он появляется при создании первого инстанса класса и остается один(а инстансов может быть много). Но посоны из падика пояснили, что объект это всегда и везде инстанс класса. Кому верить, видосику или посонам? На мсдн очень расплывчато написано, на стаковерфлоу есть темы про разницу, но там представлены обе точки зрения.

Видосик 1:02:17 https://www.youtube.com/watch?v=x0udrpe_gZE

Запрос в гугл What is the difference between objects and classes in C#?
902490902493
#497 #902490
>>902489

>between objects and instance

#498 #902493
>>902489
как правило, если ты говоришь instance, ты подразумеваешь, что это некий член некого конкретного типа, имеющий место в адресном пространстве (куча/стек/регистры/etc), если ты говоришь object, то это: a) инстанс System.Object, б) некая абстрактная нёх, назначение которой зависит от контекста

> для шарпа объект это статические мемберы в хипе, он появляется при создании первого инстанса класса и остается один(а инстансов может быть много)


судя по всему, описывается тип, а это

> появляется при создании первого инстанса класса


вообще безграмотная хуйня какая-то
при первом обращении к типу вызывается статический конструктор онли, но он не порождает объект и не создает нихуя физического
рантайм узнает о типе после инициализации (компиляции) его JIT-компилятором, но эта компиляция происходит не совсем в "момент первого обращения" или "первого создания"
902495
#499 #902495
>>902493
Короче, видос хуйня? Или ты не смотрел, просто написал? Мне бы пруф из какого-то источника именно про С#, если есть.
902496902497
#500 #902496
>>902495
clr via c#
#501 #902497
>>902495
я прокомментировал твою цитату, естессно, я не смотрел и ничего по поводу видео не написал и не буду это вот час смотреть ради рецензии

> Мне бы пруф из какого-то источника именно про С#, если есть


это исключительно вопрос внутреннего понимания собеседников
"документация" https://msdn.microsoft.com/en-us/library/ms173110.aspx говорит:

> An object is basically a block of memory that has been allocated and configured according to the blueprint. A program may create many objects of the same class. Objects are also called instances, and they can be stored in either a named variable or in an array or collection.

PEREKOT Perekoter !JLHGEtxGTk #502 #902501
ПЕРЕКОТ в тред >>902499 (OP)
#503 #902627
>>902381
Тут варианты проскакивали http://razbor-poletov.com/2016/11/episode-121.html

Если ты такой отбитый, можешь прослушать 2 часа.
#504 #902785
>>887274
ЛОЛ ты угораешь? То что он рассказывает обязан каждый школьник знать не то что программист. Если ты не осилил что в 1 байте 8 бит то о чем вообще говорить, Лысый как раз хороший вариант если ты тупой, но хотите вкатиться
Тред утонул или удален.
Это копия, сохраненная 30 января 2017 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски