Существует множество различных платформ и языков программирования, однако среди них нет более элитного, чем C#. Это поистине язык богов, сочетающий в себе простоту использования с поистине неограниченными возможностями. Знание C# - прекрасный детектор современного, умного и успешного человека. Изучение .NET безошибочно указывает на успешного в будущем человека. ITT элита продолжает обсуждает будущее этого поистине прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
Что почитать: - C# Yellow Book (для ньюфагов, книга полностью бесплатная) - Joseph Albahari и Ben Albahari - C# 5.0 in a Nutshell (на русском: C# 5.0, Справочник. Полное описание языка) - Pro C# 5.0 and the .NET 4.5 Framework (Andrew Troelsen) - Jon Skeet - C# in Depth (на русском: C# для профессионалов. Тонкости программирования) - Jeffrey Richter - CLR via C# (на русском: Программирование на платформе Microsoft .NET Framework 4.5 на языке C#) - Writing High Performance .NET Code (Ben Watson) - Pro WPF 4.5 in C# (Matthew MacDonald) - Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
>>525281 >Microsoft disabled the Last Access Time Stamp >disabled the Last Access Time Stamp >disabled >Last Access Time >Microsoft Потому что любой запрос на read автоматически превращается в запрос на write, что сказывается на диск IO.
>>525304 Первое не будет компилироваться >Возможно вы имели в виду: public int Value{get; private set;} Первое - auto property - ты все таки сможешь менять значение внутри класса. Второе readonly очевидно field, значение может быть установлено только в конструкторе или при инициализации при объявлении, в других местах - ошибка при компиляции. Значение можно быть изменено при помощи рефлексии в любом месте.
>>525309 >Новая фича Ах вот как, тогда разница только в том, что первое - свойство, а второе - поле, сахарок-с. http://ideone.com/M7jEpZ OldYoba (с# < 6.0) - эквивалент Yoba (c# 6.0). Рефлексия же ебет все ваши ридонли в рот.
Репостну с предыдущего треда. Пробую с помощью HtmlAgilityPack сохранять картиночки с вконтакта. Почему doc.DocumentNode.SelectNodes(".//*[@id='page_wall_header']") возвращает null? И вообще, это не первый случай, когда xpath, взятый с помощью файрбаг, возвращает ссылку на null. А некоторые работаю отлично, те же сосач и доброчан легко распарсились.
Здравствуй анон, надеюсь ты не против помочь мне советами. В общем, организовал "модель" на пикрелейтеде. Для сравнения тайлов между собой(нужно в основном для сортировки) реализовал интерфейс IComparable<Tile>. В связи с чем у меня и возникли следующие затруднения: 1. Возможно ли, как-то упорядочить типы наследников между собой. Т.е. например, SuitedTile<DragonTile<WindTile. В данный момент, я использую Tile "private int sortedIndex = 0" в Tile, и затем в наследниках меняю это значения в соответствии с тем в каком порядке должны идти наследники. Но какой-то говнокод, т.к. это поле к каждом экземпляре класса, хотя должно быть всего одно. 2. Можно ли в дочерних классах реализовывать IComparable<WindTile> вместо <Tile>, так чтобы это работало? В данный момент , в дочерних классах у меня вот такое написано if (other.GetType().Equals(GetType())) return ((IComparable)wind).CompareTo(((WindTile)other).wind); else return sortIndex.CompareTo(other.sortIndex); Сорта говнокод я считаю. 3. В общем-то, у меня сортировка работает, но я не понимаю почему, хочется разобраться. Я сделал сортировку некоторого набора экземпляров классов и она работает как было задумано. Но интересует 1 момент: На 2 пике. Сообственно, изображен метод CompareTo класса Tile. Когда я вызываю в массиве из Tile метод CompareTo, даже если там не Tile по ссылке на Tile, вызвается метод базового класса, т.к. методы CompareTo лишь скрывают базовый метод в дочерних классах. Вопрос вот в чём, почему на пике 2 не возникает рекурсии, т.е. я даже попытался прокастить в Tile, но компилятор говорит не нужно. Почему вызываются CompareTo не класса Tile, а SuitedTile, например.
>>525450 >1. Возможно ли, как-то упорядочить типы наследников между собой. Т.е. например, SuitedTile<DragonTile<WindTile. В данный момент, я использую Tile "private int sortedIndex = 0" в Tile, и затем в наследниках меняю это значения в соответствии с тем в каком порядке должны идти наследники. Но какой-то говнокод, т.к. это поле к каждом экземпляре класса, хотя должно быть всего одно. Сделай статическое. Хотя возникает ощущение, что ты пытаешься решить задачу неправильным способом. >Сорта говнокод я считаю. Да. См выше. >Когда я вызываю в массиве из Tile метод CompareTo, даже если там не Tile по ссылке на Tile, вызвается метод базового класса virtual+override Алсо у тебя несовременный код. Сейчас принято использовать LINQ для сортировки (OrderBy). Туда можно передать компаратор, в котором зашита логика сравнения, заодно ты эту логику вынесешь нахер из классов Tile, где ей в общем-то не место. Заодно можно сделать Dictionary<Type, int>, в котором будет указан порядок для сортировки разных экземпляров классов и делать типа var orderedTiles = tiles.OrderBy(tile => orderDictionary[tile.GetType()]).ThenBy(...)); или (что ещё лучше) эту логику тоже сложить в компаратор. Но меня всё ещё не оставляет ощущение, что ты выбрал неправильный подход к решению задачи.
>>525475 Какой смысл в твоем коде? И нет, не норм. Для того, чтобы найти «second max» в отсортированном по убыванию массиве, достаточно найти первый элемент, отличный от «нулевого» элемента массива. Не говоря уже о том, что для того, чтобы найти максимальный элемент, сортировать массив не нужно.
>>525450 Объясните нубу Там вот на скриншоте есть return ((Tile)this).CompareTo(other); Это разве не рекурсивный вызов того же CompareTo? Оно же тогда бесконечно будет вызваться если нету условия когда закончить рекурсию
>>525479 Так-то оно так, но вот почему-то в моем коде оно не рекурсируется. Если вызвать на настоящих Tile, тогда скорее всего зависнет.
>>525461 >virtual+override Но ведь метод CompareTo у меня не виртуальный и компилятор предупреждает, что метод в наследниках перекрывает метод базового. Т.е. Tile t = new SuitedTile(); t.CompareTo(other); -> Должно вызвать CompareTo базового класса -> бесконечная рекурсия, но этого не происходит, а работает как будто virtual + override.
>Но меня всё ещё не оставляет ощущение, что ты выбрал неправильный подход к решению задачи. Да меня самого терзают такие сомнения, но я же ньюфаг и не вижу всех возможностей языка и как их использовать, ну и наверно, не до конца понял что конкретно я хочу получить в итоге.
>>525586 >работает как будто virtual + override Он вызывает метод дочернего класса потому что у тебя SuitedTile : IComparable<Tile>.
Сделай Tile : IComparable<Tile>, IComparable<SuitedTile>, IComparable<WindTile> ... А в дочерних классах переопрдели эти метооды, тогда тебе не нужен будет sortedIndex, потому что в методе CompareTo ты уже будешь знать какой конкретный тип имеет this, и какой - other лел
>>525586 >Да меня самого терзают такие сомнения, но я же ньюфаг и не вижу всех возможностей языка и как их использовать, ну и наверно, не до конца понял что конкретно я хочу получить в итоге. Ну ты расскажи, нахрена тебе тайлы сортировать.
>Кстати 2015 Community > 2013 Pro Если там решарпер работает, то да.
>>525586 В общем, есть 34 различных тайла, по 4 каждого вида, т.е. в общем 132 тайла всего. Из всех тайлов каждый игрок берёт по 13 тайлов и получает свою руку. Сортировка мне нужна чтобы тайлы одного вида стояли рядом и сразу было понятно что у тебя за комбинации в руке(или намёки на них). Сейчас хочу сделать программу которая будет высчитывать количество тайлов необходимых для замены в руке, чтобы победить и т.п.(вероятности и т.д.). Для этого мне потребуется искать связности тайлов, т.е. игрок в свой ход берёт тайл, например 5 бубей(лол) и она образует некоторую комбинацию в руке, например 3-4-5(бубей), задача состоит в том, чтобы находить такие комбинации. А для того, чтобы найти число заменяймых тайлов, нужно как-то искать выигрыш в нашей руке, причём с хочу сделать так, чтобы можно было найти все возможные выигрышные комбинации и сортировать их по числу заменяймых тайлов, стоимости и т.п.
Как-то так, надеюсь хоть как-то стала ясна проблематика.
ASPач, подскажи по API, никогда раньше дел не имел, заливаю на сервер - сосу, локально запускаю через дебаг студии - работает, из клиент-приложения обработка идет и возвращает все охуенно. Файлы asp заливаются просто как любой php или html файл, или че нужно указать или настроить то?
>>525593 >Он вызывает метод дочернего класса потому что у тебя SuitedTile : IComparable<Tile>. Всё равно не понимаю, вот есть у меня код: Tile t = new SuitedTile(); Tile t1 = new Tile(); t.CompareTo(t1); //Вызывается Tile.CompareTo(other Tile) => CompareTo(other), так почему же затем вызывается SuitedTile.CompareTo(other tile)? Т.е. это из-за то, что я вызываю метод ComrapeTo(other) внутри дочернего, соответственно он и вызывает свой метод, а не базовый? Блин, есть какие-нибудь задачи, на развития понимания всего этого?
Кстати, Tile : IComparable<Tile> {...}; SuitedTile : Tile, IComparable<Tile> {...} есть тоже самое, что Tile : IComparable<Tile> {...}; SuitedTile : Tile ? Т.е. смысла в наследовании интерфейса в дочернем классе нет?
>Сделай Tile : IComparable<Tile>, IComparable<SuitedTile>, IComparable<WindTile> ... Попытался сделать, теперь пикрелейтед, бесконечная рекурсия. Как исправлять это?
Попробую ещё через комперер сделать, нужно всё опробовать, мб чему и научусь.
>>525596 >Если там решарпер работает, то да. А вы вот все тут лицензионным пользуетесь? Если нет, то откуда можно скоммуниздить и какие подводные камни? А то я СТУДЕНТ, денег нет.
Извиняюсь за засёр треда. Хотел в 1 посте всё написать, но про это забыл.
>>525637 Да хоть с рутрекера, джетбрейнс достаточно спокойно к этому пока относится, подводных камней никаких. Они вон даже на рутрекере помогают пиратам, лол.
>>525636 Про виды, я криво написал, имелось ввиду всего различных тайлов 34: три масти(в которых циферки с 1 по 9) = 27 тайлов; Ветра = 4 тайла; Драконы = 3 тайла. И каждый из этих тайлов дублируется 3 раза(т.е. всего 16 ветров, например). Ну в любому случае, то что ты написал применить к этому можно, вот только, честно говоря, мне не нравится как это выглядит. Хм, пока писал зачем мне нужно наследование, понял что действительно можно без него обойтись...Мне просто не приходила идея, рассматривать масти как отдельный вид тайлов. Если так сделатЬ, то просто сделать класс вид + значение. Спасибо :)
>>525637 Оформи студенческую лицензию, ну. Есть ли ВУЗ предостовляет персональный мэйл - заполняешь форму и вуаля, получаешь ВСЕ их продукты в бесплатное пользование на время обучения. А вообще лучше оформить ISIC и обмазываться тонной студенческих подписок на любой вкус, GitHub, Xamain etc. тому примером.
>>525645 >имелось ввиду всего различных тайлов 34 ... Какая разница сколько у тебя там чего. Cделай столько энумов сколько подтипов тайлов и их комбинаций. Только учитывай чтобы при сложении энумы друг в друга в вкладывались без колизий. Это позволит сделать глобальную сортировку сразу по нескольким признакам, а у тайла придется хранить несколько енумов полностью описывающих тайл.
Наследование не нужно, до тех пор пока не появится уникальное поведение для какого либо сочетания энумов. Я так понял у тебя этого пока нет. А потом будет жопа, либо класс действия при условиях, либо ебля енумов в подклассах.
Анон, начинаю учить C#. Стоит ли читать 4.0 Шилдта(На самом деле неважно даже что 4.0, новые фичи дочитать из других книг можно, я говорю о базисе), либо есть что-то более годное?
>>525634 https://dotnetfiddle.net/hPY4yk Сорт оф visitor pattern. >t.CompareTo(t1) Это ты руками вызываешь. Когда ты вызываешь .Sort(), там какой-то ебанутый компарер создается, который хуй знает как работает.
>>525634 >>525667 Компарер с пикрелейтед функцией создается. Из-за дженериков получается что >Tile t = new SuitedTile(), в функции становится > x = t as IComparable<Tile> Поскольку SuitedTile у тебя реализует этот интерфейс сам а не от Tile берет реализацию, то именно от SuitedTile берется метод CompareTo. Вобщем, не стоит вскрывать эту тему.
>>525272 (OP) Был сегодня на собеседовании на джуна ASP.NET отличия между абстрактным классом и интерфейсом озвучил, задание тестовое короткое выполнил, про люки ответил. И внезапно оказалось что js, jQuerry нужен и немного AJAX. А я до этого только классы в хтмл с помощью js менял при наведении, да форму валидации делал, в общем пообещали перезвонить, лол. Что можно быстро по данной теме навернуть, чтоб через пару недель не ударить в грязь лицом?
>>525450 Ты занимаешься хуйней. ООП совсем не означает, что все надо совать в один класс. Сделай отдельный класс MultiComparer
var comparer = new MultiComparer(); comparer.RegisterComparison( typeof(SuitedTile), 0, new SuitedTileComparer() ); comparer.RegisterComparison( typeof(DragonTile), 1, new DragonTileComparer() ); var cmp = comparer.Compare( dragonTile, suitedTile );
Идея понятна? Цифры 0,1 - это твой sortIndex. Если типы разные, то сравнивается индекс, если тип один и тот же - вызывается comparer (третий аргумент RegisterComparison). Гибко, тестируемо и расширяемо, а с IComparable ты заебешься дописывать условия при каждом новом типе тайла.
Можно я повниманиеблядствую? Спасибо. Если что, я, автор этой https://github.com/bo20202/OldFileDeleter говноприблуды, которая не работает из-за блядского майкрософта, создатель первого сишарп треда в котором на ОПпике была картинка C#!=java, или как-то так. В теме или в посте была надпись ОФФФФФФИЦИЯЛЬНЫЙ СИСЯРП ТРЕД в этом году. Или это было в прошлом? Забыл уже. Я знал язык на уровне дерьма, и вместе с этим тредом происходило моё обучение! :3 Спасибо вам, анончики! Вниманиеблядство окончено, спасибо.
>>525712 Пиши следущую говноприблуду. Суть токова прога фоткает рабочий стол со всеми окнами раз в минуту и клеит скрины в файл mp4. Еще есть трей и кнопки начать фотосесию или немножко подождать. Должна быть опция показать кино при загрузке системы с прошлого раза. Джва года жду такую прогу.
>>525735 Кстати можно сделать старт ап "мативационные технологии". Уже две проги будут, одна удаляет к хуям мусор с рабочего стола, вторая будет показывать кино "Прокастинирующее говно и его друзья". На до еще третью и можно толкать.
У кого есть желание помочь дебилу? Имею опыт программирование на C# на уровне "Курсовая" и "Дипломная на 35000 строк кода". Решил я смастерить себе прогу читающую файлы fb2, суть слегка модифицированный .xml, но вот только решительно не могу понять куда именно выводить итоговыйб форматированный текст? Или мне самому мастерить страницы вывода?
>>525749 >Подробнее, пожалуйста. Кнопка start/stop screen capture, чтобы можно было останавливать и возобнавлять запись. По-умолчанию прога запускется в состоянии... в настройках уточнить можно. Все клеится в один файл с обязательной датой в имени, каталог сохранения можно в настройках задать. И еще нужна кнопка start new... , для начала новой записи. Ну и exit and setting. Пять кнопок итого. >При старте винды? Да, но это шутка, такая функция не нужна. Пусть юзер сам смотрит видео когда ему удобно.
Посоны, я долбоеб. Удалил в своем проекте App.xaml. Потому что до этого добавлял какие-то xaml файлы, потом стали не нужны, а этот смотрю нихуя не делает, и пустой полностью, ну я удалил этот App.xaml, теперь не запускается, пишет нету точки входа в приложение, а где оно там блядь было, в App.xaml.cs пусто нахуй, где там точка входа блядь. Короче как вернуть все это? Скопировал из сохраненной утром версии проекта этот App.xaml и ситуация не изменилась.
>>525272 (OP) >Наследование не нужно, до тех пор пока не появится уникальное поведение для какого либо сочетания энумов. А можешь привести пару примеров такого поведения? А то я всё ещё мечусь от одного к другому, в итоге 2 реализации пилю одновременно.
Сап, пр. Есть один запрос к серверу, возвращающий определенные номера 2 разных типов. Эти номера я храню в списках, и чтобы заполнить сразу 2 списка я решил воспользоваться методом с out-параметром.
sMethod(List<int> numbers1, out List<int> numbers2) { ... шлем запрос, заполняем списки и т.д. ... return numbers1; }
Собственно, проблема в том, что numbers2 должен инициализироваться в теле метода, но инициализация через = {1, 2, 3}; не прокатывает. Поэтому приходится пользоваться костылем в виде создания нового пустого списка и присваивания его numbers1. Есть ли альтернативный способ?
Я еще довольно низкоскилловый и практикуюсь по ходу чтения обучающей литературы, так что о классе Tuple и кортежах еще пока не слышал. Спасибо, изучу подробнее.
>>525272 (OP) Многомерные массивчики. Можно ли взять матрицу и задать в одну строку значение всем элементам по ваовиаовоаво пример: int[,] arr = new int[3, 5]; arr[2][хуйхуйхухй]={0, 2, 5, 7, 7}; как чо сделать это
>>525944 Скопировал, нихуя не помогает, да и толку, если он пустой, в общем сделал так, взял утреннюю версию и туда скопировал все что я менял за день, а именно 2 cs файла, все норм.
Шилдт просто божественен. Читал его книгу по java, потом бросил. Сейчас читаю по Шарпу и тоже бросаю периодически. Бросал не потому что они хуевые, а наоборот настолько охуенные, что я хочу начать ТВОРИТЬ! В итоге творить получается, но можно бы и получше. Поэтому сейчас стараюсь дочитать ту самую книжку Шилдта по C#.
>>526109 Я просто начал читать и чет как-то меня перевод не устраивает. Местами очень странные предложения которые по всем ощущениями переводил кто-то дико далекий от кодинга. Теперь вопрос стоит ли читать на Английском или не заморачиваться?
Ну смотрите: есть опыт создания приложения для ВФ8.1, хочу полноценно вкатиться в мобильную разработку и пойти джуном или фрилансить. 1) Правильно ли я понимаю, что самым лучшим вариантом сейчас будет — портировать моё приложение на ведро через ксамарин и написать в резюме, что я ведро/ВФ-девелопер? 2) Нужно ли выкладывать ведро-приложение в стор, чтобы похвастаться в резюме/портфолио? Не хочу покупать девелоперскую лицензию и ебаться с магазином, если можно как-то без этого Или лучше положить его на сайт-визитку/залить в гит/етц? 3) Чем плох ксамарин? Какие подводные камни меня поджидают?
>>525996 Пусть будет два дракона один ледяной другой огненный. Предположим урон у них считается по разному у огненого будет "горение на 13 сек" у ледяного "заморозка на 3 сек и замедление на 5".
Еще где-то есть волшебный метод DoAttack(Target).
Если драконы различаются только енумом и некоторыми универсальными параметрами, то в методе DoAttack появится switch который будет проверять, что за дракон и поразному интерпретировать одинаковые данные. Для одного поля времени у ледяного будет считася заморозка, а у огненого - горение. Т.е поведение по факту разное. Тут можно отнаследоваться. Общее правило: любой нетривиальный swich/if можно превратить в подкласс с виртуальным методом.
Лол, из меня обеснялка такая же, как из тебя про тайлы.
> 2 реализации пилю Это норма.
Вот накатал свой вижн только ради сортировки: http://pastebin.com/WBTLdYQj Только не бейте, лучше обосыте. Алсо, походу у тебя путаница в терминологии. Дракон и Ветер это нихуя не тайлы - это всего лишь часть которая без карты не фурычит. Еще меня подмывает избавиться либо от Card, либо поместить в нее ДраконоВетра тогда тайл нинужин. А еще я не понял валидный ли тайл с одной картой(масть-значение), но без ДраконоВетра и наоборот?
>>526225 >Общее правило Общее правило простое: НАЧНИТЕ ПИСАТЬ ТЕСТЫ, УЕБКИ ВЫ МАЛОЛЕТНИЕ!!1 С тестами вы очень быстро заебетесь писать стены кода на каждую хуйню и начнете думать об архитектуре.
>>526225 Внимание, вопрос: в скольки местах придется исправить твой код, если к ветру и дракону надо будет добавить эльфов и орков? Про то, что алгоритм работы этой хуйни вообще не очевиден, я промолчу. Через неделю ты сам охуеешь в этом разбираться.
>>526234 Фу какой тупой бугуртыш. Думать об архитектуре это что-то из разряда анонизма, сука ее нужно быстро-решительно писать и изменять, а как станет норм по требованиям, писать начисто, и от стены чернового кода с тестом никуда не уйти. Мамкин теоретик бля.
>>526235 В шести местах, а что? На самом деле, все индексы и магические числа можно(нужно, но мне лень) вынести в компоратор и место измений будет всего одно.
>алгоритм работы этой хуйни вообще не очевиден, я промолчу Нет не молчи, напиши лучше или не Лев Толостой. До любого кода можно доебаться.
Кст. у меня на скрине фейлбля, только заметил. Веса надо по-лучше подобрать, а то я их взял с потолка и диапозон не влез.
>>526155 > самым лучшим вариантом сейчас будет — портировать моё приложение на ведро через ксамарин Зависит от того сколько у тебя общего кода. Если допустим приложение это браузер или плеер - то это бессмысленно.
> Нужно ли выкладывать ведро-приложение в стор Нужно - будет бесплатный трафик (если у тебя приложение не уровня калькулятор, коих миллионы). Но учти что у тебя не должно быть эротики (мне так 2 приложения забанили).
> Чем плох ксамарин? Платный - под мак я так крека и не нашал, под винду есть. Проблема в том что xamarin часто обновляется (фиксят баги) и при этом старые креки не работают. Да еще под виндой не пашут всякие фишки rosyln, при этом под маком все компилится. Ну и главная проблема - больше потребление памяти, размер apk и приложение будет стартовать 1-2 секунды
>>526145 Это не то. Мне надо добавить массив к многомерному массиву. Есть int[,] anon = new int[2, 2] {{0, 1}, {2, 1}}; int[] dwach = new int[2] {5, 5}; anon [1] %какая-то штука% = %может быть здесь еще что-то% dwach; >>anon >>{{0, 1}, {5, 5}}
>>526323 >>526310 С другой стороны, ты точно внимательно читал ссылку, которую тебе дали? var massiv = new int[2][]; var massiv2 = new int[10]; massiv[0] = massiv2; massiv[1] = new int[] {1, 2, 3, 4, 5, 6};
Согласно учебнику по Haskell, так как C# не ленивый язык, он выдаст ошибку в строке if (item == null || item.Text != "N") continue; если item равен null, но этого не происходит. Почему?
>>526340 Потому, что || не проверяет вторую часть условия, если первая истинна. Впрочем, есть еще |, который проверяет обе. Лучше бы ты читал учебник по шарпу, а не хаскелю.
>>526332 Я её даже не открывал. Искал на русском msdn и не нашел, еще он показал, как объявлять двумерный массив, думал, мне ссылку кинули туда, где я глядел . Однако, спасибо. И еще один ламмер-вопрос. Надо из строки сделать целочисленный массив. Как правильно ето вторить? Делаю так: int[] hui= Array.ConvertAll<string, int>(строка.Split(new String[0], StringSplitOptions.RemoveEmptyEntries), Int32.Parse);
В тред призываются боги написания серверов. Короче, есть несколько приложух для мобилок. Надо отслеживать сколько раз каждую приложу ставят, сколько раз запукают, длину сессии и прочую херату. Под эту фигню я хочу написать сервак на божественном си шарпе, который будет получать get-запросы с параметрами, записывать значения в базу и иногда посылать в ответ на клиент джисоны с инфой. Вся эта херата должна масштабироваться до 1 ляма запросов в секунду.
Стоит ли писать на сишарпе? Может лучше ебануть на пхп? Есть годные гайды? Какие подводные камни?
Сап, гуру шурпа, подскажите студентоте: 1. Прочитал Jeffrey Richter - CLR via C#, большую часть. Книга очень объемная, и описано очень много всего достаточно детально, по сути справочник шарпа. Изучая что-то новое, возвращаюсь и перечитываю соответствующую главу из книги, и всё нормально понимаю. Стоит ли качать и читать какие-то другие (если да, то какие) книги по шурпу? Мол есть ли в других что-то, чего нету на этих 900 страницах, как-то так. 2. Что почитать, чтоб научиться юзать LINQ и лямбда-выражения? Несколько раз использовал, но всякие шаблонные примеры, а показались эти вещи очень удобными и юзабельными.
>>526447 Лучше почитай Макконела и Мартина, а не всякую хуйню. Рихтер - это тупо справочник, полезный чуть более чем нихуя. LINQ - нечитаемое говно и ненужен
>>526463 О, мальчик, снова мы идем! Ты прочитал в книжке, что LINQ ЕТА КРУТА? До выхода линка все разработчики материли sql за уебанский декларативный подход. Вышел linq, подросло поколение школьников и хуяк, теперь модно писать нечитаемое декларативное говно вместо понятного императивного кода. Ты не задумывался, что далеко не все фичи, которые майкрософт сует в шарп, являются полезными?
>>525272 (OP) >Существует множество тредов в /pr/ и ОПов, однако среди них нет более крякливого, чем этот. Это поистине язык в бактериях, сочетающий в себе быдлоту использования двача с поистине неограниченными возможностями. Знание создания тредов - прекрасный детектор современного, умного и успешного человека. Изучение разметки двача безошибочно указывает на успешного в будущем человека. >/b/ элита продолжает обсужда ть будущее этого поистине тавтологического и совершенно безмозглово продукта компании Утка™.
Парсю жсон библиотекой ньютонсофта (но можно и стандартной), есть строка {"2015-08-04": 91, "2015-08-05": 102, "2015-08-01": 138, "2015-08-02": 121, "2015-08-03": 102}. Как перегнать её в массив ключ-значение?
>>526225 >Алсо, походу у тебя путаница в терминологии. Дракон и Ветер это нихуя не тайлы - это всего лишь часть которая без карты не фурычит. Ты ничего не понял, потому что я хуево объясняю. Пикрейлэйтед: На пике 5 видов(типов) тайлов: масть бамбуков, масть символов, масть точек, драконы, ветра.
>>526569 Охлол, тайлы совсем ничем не различаются их можно в один enum пихать, а его в класс для возможности создать по 4 одинаковых но разных для программы тайла.
Сап шарпач, более-менее научился. теперь слудущее: посоветуйте годную книгу asp.net для нубов. и почему даже у Шилдта не писалось про графическую и звуковую библиотеку ? где на них инфу откопать ? Ну и какие маны посоветуйте по поводу вендоинтерфейса?
>>526769 Она одна в принципе. Adam Freeman - Pro ASP.NET че-та там. Про графику и звук — это кресты + dx. Под шарп надо гуглить обертки и, соответственно, туториалы по ним. Лучше к гейдевам с этим вопросом сходить.
Шарпаны, как сделать one to one relationship в EF используя Database First? Дохуя уже чего перепробовал: сейчас у меня в таблице Client поле ClientId int PRIMARY KEY, а в дочерней таблице ClientAddress поле ClientId Foreign Key, Unique, Not Null, но всё равно ебаный EF генерит класс Client с коллекцией Addresses, а не одним Address.
>>526852 Хуй знает. Там должна быть схема базы (edmx) и в ней должны все связи указываться. Впрочем, может это не от ef эта шляпа. Никогда с ef от базы не работал. Попробуй фк перенести в Client.
Хочу сменить работу в ближайшее время. Проблема в том, что последние полтора года я не работал с новыми технологиями, а поддерживал легаси хуйню на винформс и писал программы с не очень сложными алгоритмами для одной ненужной гисы (все на шарпе). На гитхабе есть несколько проектов, но на шарпе только один и это raycasting движок как в вульфенштайн 3д. Думаю, что нужно написать что-нибудь и выложить на гитхаб, но не знаю, как лучше поступить: продолжать выкладывать вещи на OpenGL и OpenTK, потому что мне это нравится, или написать какую-нибудь хуйню со стеком C#\WPF\SQLite\EF? Если второе, то подкиньте идей (мне ничего кроме крудопараши не лезет в голову).
>>527164 Тоже не силен в алгоритмах. Во втором случае начал почему-то сразу думать про алгоритм нахождения таких пар. Впрочем, по алгоритмам это, наверно, Кормен и Кнут.
>>527141 Сделай прогресс бар с плавающим индикатором. Или, если у тебя рекурсия быстро отрабатывает, увеличь значение прогресса пост-фактум вместо увеличения на каждой итерации.
>>527126 Можно добавлять бесконечно малые числа в конце, как это делает прогрессбар эксплорера (в начале скорость прогресса очень быстрая, а концу она уменьшается до 1нм в час). Типа: (Прогрессбар.Максимальный прогресс - Прогрессбар.Текущий прогресс)/2
>>527176 Я находил пары простым перебором без повторений по старинке - циклами, на что мой друг рассмеялся, сказав: "Ты на Шарпе программируешь вообще или на Делфи?".
Со второй ссылки меня интересует выражение: int result = sequence.Intersect(from item in sequence select item + difference).Count(); SQL какой-то в моих шарпах.
>>527195 Я вообще не очень люблю декларативный линк и не пользуюсь им. Можно переписать так: var diffSeq = sequence.Select(x => x + difference); int result = sequence.Intersect(diffSeq).Count(); Всякие from in — действительно закос под сиквел, который транслируется в вызовы методов расширения линка на IEnumerable/IQueryable. Почитать можно у Албахари, например, или по первой ссылке гугла на запрос c# linq.
Я тоже писал маджонг, на ведроид для курсовой. Тип костей обозначил... string type! Разным для разных костей, но одинаковым для цветов и сезонов, и сравнивал тайпы. Нахуя ты всё это нагородил?
>>527233 А какой по представленным данным будет шарповый?
На вход задаются границы диапазона, например 200501 и 201508, программа обходит все урлы с месяцами в границах этого диапазона, парсит полученный жсон и дополняет array. cl - WebClient, lang и page - элементы урла.
>>527235 Очевидно, что с использованием классов, инкапсуляции и соглашений наименования языковых конструкций. То, что ты запостил — это хуевый си с безусловными переходами на метки.
>>527237 Метка там всего одна, обеспечивает зацикливание программы (это консолька) после успешного выполнения запроса, чтобы она запрашивала данные для следующего прохода. Я не фанатик "правильного стиля кода", поэтому не боюсь goto, как чёрт ладана. Ладно бы это можно было заменить бесконечным циклом, но на стартовую метку надо переходить ещё и при исключениях, например если введены некорректные данные для запроса.
>>527242 У меня такое ощущение, что ты это все написал рядышком с точкой входа в программу. А про циклы: не вижу никаких проблем с исключениями и циклами. Метки нужны только в одном случае — для выхода из вложенных циклов. Впрочем, do as you please.
>>527268 ОК. Мне нужно переходить на стартовую метку 1) из конца программы 2) при выбрасывании исключений веб-клиентом и десериализатором жсона. Оба вызываются внутри функции, вызываемой из тела программы. Твой вариант архитектуры?
Шарпач, что насчет Windows IOT? Кто уже пердолит код под raspberry на шарпе? Алсо, где можно годно натаскаться на тему XAML, нашел только на ютубе ебал-дремал туторилы пиндосские
>>527333 стрим в память хуярит же, textreader - это тебе например надо читать с файла в массив и по завершению textreader.read() вернет -1, с -1 и начинаешь играть в if и тд. смотри методы на msdn, writer в поток записывает, тоже там методы смотри
>>525272 (OP) После каждого запуска программы записываю значение переменной в файл при помощи File.AppendAllText, но никак не могу сделать, чтобы писалось с новой строчки каждый раз.
//вот так сделал //основная программа в другом потоке //а этот код чисто клавиши ловит
// ConsoleKeyInfo butt = new ConsoleKeyInfo(); do { if (Console.KeyAvailable) butt = Console.ReadKey(); if (butt.Key == ConsoleKey.Escape) break; if (butt.Key == ConsoleKey.B) Console.WriteLine("B for Bydlo!"); //и т. п. } while (true); ///
>>527385 Хотя бы Thread.sleep(0) влепи в цикле, а лучше в районе 20-50. И не забудь с этого метода поймать ThreadInterruptedException, чтобы закончить выполнение потока.
>>527394 Если спускаться до уровня винапи, то так оно и выглядит. Заводишь функцию, в которой засовываешь бесконечный цикл и в этом цикле слушаешь клавиатуру. А чтобы не отжирало, то способ анона выше должен сработать. Можешь покрутить значение, передаваемое в sleep.
Анон, решил учить шар по Стоиллмену (3е издание) для йоба приложений под ВФ и вин 10, столкнулся с тупорылейшой проблемой, в книге при создании проекта он выбирает шаблон windows store в вижул студио, но у меня блядь его нет, пиздец просто, я уже перечитал хуеву тучу форумов, у всех есть сразу после скачивания, а у меня - нет. Подскажи пожалуйста что я делаю не так, сразу извиняюсь за очевидно нубский вопрос.
Короче, это не оно. Мне нужно создать Blank App (XAML), а оно находится в шаблоне Магазин шиндовс, которого нет. Как его накатить, аноны? >>527454 - кун
>>527463 Уважаемые пользователи! Приносим свои извинения, но доступ к запрашиваемому ресурсу ограничен. Возможные причины ограничения доступа: Доступ ограничен по решению суда или по иным основаниям, установленным законодательством Российской Федерации.
да я мимокрок, просто по ксамлу ищу годных материалов, скинь на другой ресурс ПЛЕС
>>527466 Через проксю зайди. >>527456 Зашел сейчас в 15 студию. Там в templates -> c# -> windows -> universal предлагают тулзы установить. Ты их ставил?
Где находится раздел <authentification>? В учебнике написано, что <authentification mode = "Forms"> <forms loginUrl = "~/Account/LogOn" timeout="2880"/> </authentification> по дефолту в web.config прописано, но там нет ничего, и куда запихать я не знаю.
%%И хули этот ваш mvc такой замудреный?! Чувствую, скоро забью и пойду устраиваться на работу в макдональдс.%
>>527489 Видел. Но я ток начал, они для меня отличаются только в одном. В mvc представления верстают на razor по большому счету, в формах можно элементы прям с панельки на страницу aspx закидывать.
Слишком много всего делается за кадром, постоянно что-то автоматически вызывается, аргументы какие-то куда-то передаются. Я вообще слабо понимаю как это запускается.
>>527721 Ну можно было просто написать interface IControl { void Paint(); } class Control: IControl { public virtual void Paint() {...} } class TextBox: Control { public override void Paint() {...} }
>>527807 Так тебя явная реализация интерфейса смущает или вызов виртуального метода внутри интерфейсного? Кто знает зачем им явная реализация, мб вызов Paint не предназначен для повсеместного использования и требует специальной инициализации.
>>528125 Нет, но можешь попробовать SharpDevelop. Там есть поратбл версия и она даже WPF-дизайнер поддерживает (в некоторых местах даже лучше VS, лол). Но если тебе нужен весь функционал вс, то вариантов нет, уж слишком много вещей она по всей системе ставит. Разве что на виртуалку поставить, к счастью она не так уж и требовательна к ресурсам, конечно если у тебя не огромные проекты и куча дополнений.
Какая книга лучшая для изучения c#? Сам перекатываюсь из явы, читал Thinking in java - ультрагоднота, не побоюсь её сравнить с SICP. К сожалению по шарпу не могу найти подобное. Почти дочитал Троелсена, но он пишет без особой глубины - дается описание класса и его функций, тухленький пример и все, глава заканчивается. Ни применение концепций ООП в .NET(скучные главы по только по основам, не более), ни интересных задач, словно он пытался рассказать про все и сразу, но преподавательского опыта не хватило.
>>528620 >применение концепций ООП в .NET Ничем не отличается от джавы. Если ты можешь в джаву, ты автоматически можешь и в шарп. Все то же самое, только классы по-другому называются.
Аноны, не обосрусь ли я, читая C# yellow book на инглише уровня achiver? Как я понял, это основа-основ для самых ньюфагов. Нужно ли будет сидеть с переводчиком или там все и так понятно?
Составляю резюме джун точкаСЕТЬ. В графе ЭКСПИРИЕНС просто написать "without commercial experience" или еще приписать что то вроде "2 years non-commercial experience (small games, forums, some shit, etc.)"?
Посоны, я тут где то три недели потихоньку ковыряю c#, до этого никогда ничего не писал, разве что в школе на паскале. Написал программу для нахождения правильных ходов для коня на шахматном поле. Я уверен что написал настолько лютейший говнокод, что вы такого и не видели никогда. Но это все, что пришло мне в голову. Может кто нибудь посмотреть на него и сказать как сделать лучше? http://pastebin.com/UM9tebSR
>>529063 Публичные поля класса - плохая практика. В шарпе на такой случай есть свойства. В структуре же ты их использовал.
>(string)f.wentsList.ToString() Ээ.
Еще у тебя статический метод неочевидный. Т.е. ты его вызываешь и тем самым меняешь внутрннее состояние инстанса класса Figure. При этом назвал его проверка позиции. На такой хуйне можно на пару минут залипнуть, если кода в файле много будет.
В целом вроде норм, хоть после целого дня кодинга я уже не понимаю, что делает твоя программа.
>>529063 Избавься от try-catch в ChessTable. Исключения очень тормозят, и бросать их стоит только когда действительно всё. Замени на явную проверку попадания в поле.
> Wents w = f.wentsList[ i ]; w.isValid = true; f.wentsList[ i ] = w; Безсмысленно. Достаточно f.wentsList[ i ].isValid = true;
>>529142 >Замени на явную проверку попадания в поле. Вот это и была моя проблема. Я не знаю как по нормальному это проверить, просто не додумался как выяснить штатными средствами попадает ли точка в Range массива. Поэтому вот ТАКОЕ написал, и мне стыдно перед собой за это. Работает по принципу если выскочил эксепшен - ниче не делай, иначе говори что ход правильный. >Безсмысленно. Достаточно f.wentsList[ i ].isValid = true; Изначально так и было. Но так не скомпилируется, выкинет ошибку, потому что я работаю со структурой.
>>(string)f.wentsList.ToString() >Ээ. Я знаю, что там не нужно явное приведение типа, это осталось от старого варианта, когда я там затупил, просто не убрал. По поводу статики и неверного именования, это проблема проектирования, если так можно сказать. Я писал на ходу, и изначально этот метод реально должен был только проверять и ничего не делать, но потом все это обросло новыми объектами и кодом, логика сменилось а название осталось старым.
>>529185 >но потом все это обросло новыми объектами и кодом Одно слово — рефакторинг. Когда начинаешь жопой чуять, что дела складываются не лучшим образом и ты пытаешься впихнуть невпихуемое — самое время заняться. Впрочем, можно и по ходу дела этим заниматься.
Анон, помоги советом. Живу в мухосранске (300к). Хочу устроиться в какую-нибудь контору, чтобы в дальнейшем стать жуниором c#. Знаний моих на жуниора не хватает не знаю ни одного жуниора, думаю такая планка актуальна, пойти как трейни нет возможности, просто из-за отсутствия подобного варианта в местных конторах. В конторах на жуниора требуют от 1-3 лет опыта разработке. Писал только для себя всякие приблуды.
>>529288 Без аккаунта вроде 30 дней, точно не помню уже. Пилишь аккаунт в системе Microsoft вот по этой ссылке https://visualstudio.com Логинишься в студии, и пользуешься сколько влезет.
Шарпаны я тут столкнулся с логической проблемой. У меня есть книжка албахари хотел докупить остальные годные но шара то не хило прокачался книжки получается морально устарели но издания их за 2015 год. Как думаете ждать нет свежак или за 15 брать ? У меня не подгорит потом ? А то у меня пунктик что бы все свежее и топовое было
Народ, обмазываюсь Service Bus, но не могу найти подходящее для себя решение задачи. Нужна система "1 генератор сообщений" -> "неопределённое количество анонимных потребителей сообщений". Topics/subscriptions, насколько я понял, заставляют создавать сабскрипшн на каждого консьюмера, а Event Hubs я не понял вообще с его партишнами и консьюмер группами.
Господа, с вами снова нуб-3-недели-с#. Написал реализацию связного списка с собственно методом разворота списка. Говорят, на собеседованиях это многих ставит в тупик. Я тоже тупил наверное минут 30, не мог поверить что решение такое простое. Посмотрите пожалуйста код, может я таки не допер? Хотя проверил, работает.
>>529573 >А что не так? Ну, ты написал совсем уж говнокод. В ноде достаточно оставить свойство Next, HasNext переписать как Next != null, добавить конструктор со значением. В списке надо переписать метод Push. Вынести создание ноды за ветвление, в ветках убрать установку нала для Next, ибо он там по-умолчанию. Ну и прочее еще там по мелочевке. Просто первая мысль была — в жабу опять свойства не завезли.
>>529582 >>529585 Я же просто пытался задачку для собеседования пройти. Next переделал. Просто смотрел обучалки на ютубе, там часто создают приватные поля и публичные свойства к ним, я думал это нормально. Причем в гет/сет там никакой спец логики не реализуют.
>>529628 Приватные поля, как бек поля под свойства, нужны только в том случае, когда у тебя есть логика в геттерах/сеттерах. Иначе это пустая трата времени, ибо компилятор сам создаст приватное поле и два метода для чтения и записи.
>>529531 Разве для разворота списка нельзя просто поменять ссылки на следущий узел ссылками на предыдущий узел, и еще голову и хвост использовать для начала замены. Прост какой-то мутный темп создается, +n памяти за просто так - жаба душит.
>>529531 >на собеседованиях это многих ставит в тупик Посылай нахуй этих пидорасов. Это тест на покорность, а не на знания. Серьезно, вот я у мамки синьор с 9 годами опыта и писать разворот списка - это последнее, что мне придет в голову. Если возникнет подобная задача, я возьму алгоритм из справочника типа Кормена и то, если не будет готовой библиотеки или копипасты на стековерфлоу.
>>529712 Как накопишь опыта, можно и удаленно работать на ДС. Сам работаю в говноконторке в мухосрани. Через годик-другой собираюсь работать удаленно, как и бывшие, более опытные коллеги. джун из мухосрани
>>529954 Погугли реализацию IEnumerable через yield return. Все не перестаю проигрывать с твоего класса ноды. Зачем тебе отдельный метод и приватный сеттер? И Push не переписал. А вот это хуйню: [code] if (Next != null) return true; return false; [/code] распечатай и на стенку повесь.
>>529962 Дело даже не в этом. Достаточно просто переписать на return Next != null; Стандартная проблема новичков, почему-то. Потом сами же проигрывают с таких конструкций (как мы сейчас)
>>529954 Во-первых, опечатки. Во-вторых, как правильно заметил анон выше, пользы от отдельного класса ноды никакой. В-третьих, имена переменных с нижним подчеркиванием обычно используются для обозачения полей класса. У тебя же параметр с нижним подчеркиванием во взятии по индексу.
>>529961 >Зачем тебе отдельный метод и приватный сеттер?
Может я какую нибудь логику потом допишу в методе. Разве это принципиально?
>return Next != null;
Вот это заебись, не понимаю почему не додумался сам.
>Я тоже не понял нахуя этот метод, если он его даже не использует нигде
А вдруг я его потом в коде где то использовать буду? Типа узнать по быстрому конечная ли это нода?
>пользы от отдельного класса ноды никакой. Вот это не понял. Почему пользы нет? Мне кажется такая конструкция логичной. Как переписать лучше? Про нижнее подчеркивание понял, переделаю.
>>529994 >Разве это принципиально? Принципиально. У тебя и так метод есть — сеттер Next. Будешь дописывать логику — уберешь автоматическое свойство и перепишешь на обычное с полем. И вообще, заканчивай думать в ключе «Вот может в будущем пригодится». Когда понадобиться, тогда и напишешь.
>>529996 Ты не забьешь на него: компилятор не даст, но ты можешь вызвать в нем обобщенную версию.
>>529995 > Чтобы не выбрасывало NullReferenceExeption
В каком месте оно может выбрасыватьс да еще при добавлении, это если ты попытаешься обратиться к Node.Next тогда выбросит, а в добавлении у тебя такого обращения нету.
>>530001 > Ты не забьешь на него: компилятор не даст, но ты можешь вызвать в нем обобщенную версию. В любом случае IEnumerator вызваться не может, ведь класс только в обобщенном виде создается.
>>530015 - Где вертикальные отступы? - Убери нахуй -1. - Имя класса не должно быть длиннее 15 символов. - А если я попробую запушить null-объект? - Свойства должны быть после конструктора. - Если класс список, на кой хер называть в нем методы RevertList? - Если у меня список будет двусвязным, это мне нужно для него нод специальный объявлять? О боже! Такой маленький участок кода и так ужасен. У тебя индент через табуляцию? - Просто скройся.
Поясните за исключение, вот бросаю я из класса какое-либо исключение через throw. Как юзеру моего класса узнать что он должен позаботиться отловить это исключение? В Джаве вроде есть throws который к сигнатуре метода дописывается. И как бросать эрормеседжи/эксепшены не в рантайме, а на этапе компиляции?
>>530112 >И не нужно Ты мне напоминаешь жаба-макак. - Смотрите, лямбды! - Не нужно. ... В Java 8 вроде добавили лямбды. - Смотрите какая крутая фича в новой жабе, сисярп сосет.
Знаешь что такое юзер воис? Так вот... там есть такая фича репорт.
>>530135 Я про другое. У меня печать на уровне спинного мозга. Если я слово неправильно представляю, я его неправильно и напишу. А всякие DSL - это не мои базворды и их хуева туча.
>>530131 >2011 >~100 votes А ты так говорил, как будто уже все — завтра в билд.
>Мне больше нужны миксины От множественного наследования как-то отказались, вроде. Интерфейсы запилили. Впрочем, тот же вопрос. Не видел реального кейса их применения при статической типизации.
>>529954 >: IEnumerable<T>, IEnumerator<T> Лолбля, неправильно. IEnumerator<T> хранит состояние итератора(тот самый индекс текекущего элемента, ага), их может быть несколько. Попытка поитерировать по твоему листу в двух вложеных форах закончится фейлом. Либо делай отдельный класс, либо ейлд ретурн.
>>530327 Дальше прокликай. Там несколько кейсов, но по-сути идет проверка типа, выбор подходящего EqualityComparer'а и приведение типов. Шо непонятного-то?
>>530177 >Не видел реального кейса их применения Например INotifyPropertyChanged. Все, что нужно - наследоваться от ViewModelBase, но если кастомный класс должен еще наследоваться например от контрола, то придется копипастить реализацию с ViewModelBase. Понятное дело, это будет скорее не контрол, а что-то иное. Если это собственный класс, то придется перестраивать архитектуру и избегать этого, например созданием клона DTO-объекта, но появится скорее всего ненужная сущность, которая будет хранить этот объект например через композицию. В общем, существуют случаи, когда лучше использовать наследование, через композицию, вот тогда и появляется дублирование кода.
Аноны, два вопроса. Первый: как правильно использовать IoC контейнеры? Есть у меня несколько алгоритмов, которые наследуют один интерфейс. В этих алгоритмах, в свою очередь, тоже есть некоторые зависимости от других частей системы, с которыми я так же работаю через интерфейсы. Проблема в том, что сейчас у меня в местах вызова алгоритмов проверяются параметры, в зависимости от которых у меня конкретно прописываются классы, которые нужно инжектить. Ну т.е. IAlgorithm alg = new AlgContext(new ConcreteAlgorithm1); Такой подход меня не устраивает и я обратил внимание на упомянутые IoC контейнеры. Проблема в том, что я не знаю, как правильно один раз задать все нужные мне зависимости на время выполнение конкретного алгоритма. Пользователь вызывает функцию 1, я через IoC разруливаю эту ситуацию, но у функции 1 тоже есть зависимости. Не передавать же мне ссылку на экземпляр моего контейнера этой функции, это хуйня полная выходит. В голову пришло только создать какой-нибудь класс с одним статическим методом, который бы возвращал мне контейнер с уже настроенными зависимостями, и вызывать этот метод, когда нужно. Норм? Использую Ninject.
Второй вопрос: раньше в программе было две функции и суммарно четыре настройки для этих функций. Чтобы не передавать их параметрами в конструктор или метод я завел отдельный класс, назвал его Settings. Когда пользователь вызывал функцию, я считывал инпуты в этот Settings и передавал в функцию. Проблема в том, что сейчас функций уже шесть и суммарно у них около 16 параметров. Из-за этого Settings слишком сильно разросся и мне не нравится таскать такую тяжеловестную хуйню повсюду. Как мне разрулить эту хуйню? Для самой сложной функции на форме сейчас 12 инпутов, которые пользователь может заполнить. Из них четыре обязательны, а все остальные опциональны в зависимости от того, какие пользователь уже поставил пресеты.
>>530895 >класс с одним статическим методом Тесты как к такому писать? IoC контейнер является такой же точно зависимостью и должен инжектиться, а не дергаться через статик метод. В точке входа в программу создаешь настроенный контейнер и инжектишь в главный класс. В тестах подставляешь мок.
>таскать такую тяжеловестную хуйню повсюду Размер указателя не зависит от размера данных, на которые он указывает. Продолжай использовать Settings и не парься.
>>530895 1. Тут возможны два случая - google pattern strategy gof - если тебе нужны разные алгоритмы в процессе работы. Статик фабрика/метод тоже подойдет, тока пусть сразу возвращает IAlgorithm, а все зависимости фабрики ioc зарезолвит сам.
Или тебе нужен 1 алгоритм, тока ты не знаешь какой. Типа, пользователь 1 раз ввел параметры и все дальнейшие действия ты делаешь тока с одним конкретным алгоритмом. в том месте, где ты конфигурируешь контейнер/получаешь параметры, ты указываешь контейнеру, что IAlgorithm нужно резольвить конкретным ConcreteAlgorithm1.
2. Декомпозируй свои сеттинги. Setting содержит в себе Func1setting, func2setting etc которые уже и идут в конкретную функцию. В любом случае, метод должен знать как можно меньше информации, и типа низя передавать туда большой обьект, если методу нужно только 2 свойства из этого обжекта. А если нужны все - декомозируй свой метод на более мелкие части. Ваще, можно сделать какой-нить configurator, который уже читатет твои сеттинги и конфигурирует что-то, и твои функции имеют этот конфигуратор в приват филде, полученном через ctor. Типа, инкапсулировать логику работы с настройками от непосредственно логики.
>>531028 Тебя пошлют нахуй. Любой работодатель спит и видит чтобы взять долбоеба за опыт, а потом он через год написал хуеву тучу кода съебал к конкурентам и оставил разгребать весь говнокод другим программистам.
Если даже работодатель настолько дебил, благородный сэр >>531030 правильно написал. Разработчики знают последствия таких "работают ради опыта" и отпиздят тебя в параше, переломают руки нахуй и обоссут.
>>531036 > Разработчики знают последствия таких "работают ради опыта" и отпиздят тебя в параше, переломают руки нахуй и обоссут. Бля, как страшно жить. И на работу теперь не устроиться, ведь всюду могут отпиздить...
>>531039 > тратишься на транспорт и еду, даже если ты в общаге живёшь. Я с мамкой живу. И у меня много денег со стипендий накопилось. На проезд хватит, еду и квартиру мама оплачивает.
>>531043 Ты заебал, такие, как ты, уменьшают зарплату всем, ты понимаешь? Тебя будут гнобить работающие с тобой люди, и будут делать это оправдано, потому что ты мудак.
>>531046 > Тебя будут гнобить работающие с тобой люди, и будут делать это оправдано, потому что ты мудак. А если я буду за мизерную зп работать тоже гнобить будут?
>>531047 Да. Для джунов сложилась определенная планка зп, ориентируйся на нее и не выебывайся. И начни уже уважать себя и свой труд, а то как негр-раб какой-то с плантации.
>>531043 Эээ нет, когда начинаешь работать мировоззрение начинает меняться. Начинает хотеться всяких ништяков на которые нужны деньги. Просто банально пообедать в москве в день выходит 200-300 рублей (в киеве - хз) или самостоятельно готовить/мамку напрягать И работодателю тоже не в кайф такого работника иметь - оформить тебя без минимальной оплаты труда он не сможет, а с такой зп он не может быть уверен в твоей лояльности.
>>531047 Мамка будет гнобить, что работаешь, а домой нихуя не приносишь.
>>531051 > Мамка будет гнобить, что работаешь, а домой нихуя не приносишь. Моя мамка няша :3 > Начинает хотеться всяких ништяков на которые нужны деньги. Я неприхотливый, никогда не понимал как можно тратить деньги на еду, если можно поесть дома.
>>531060 Короче, не демпингуй, усёк? Зачем просить меньше, если можно попросить больше и тебе не откажут. Не нужны деньги сейчас, понадобятся потом. А то научишь В восточной европке и так низкая зп для it.
Суп, котаны. Хочу рассказать вам не охуительную историю и спросить вопросы. Я мамкин Эдмунд Макмиллен, могу в растровую графику чуть лучше Аллаха, решил изучать код, чтобы делать игори. Поскольку на свете существует бесплатный, годный хуЮнити для маминых геймдеверов, мой выбор пал на изучение УГЛЕРОДНОЙ РЕШЕТКИ. Значит, пошел гуглить книги, нагуглил какую-то малафью, понял, что я, оказывается, гуманитарий, поскольку слова, которые я читал, вообще не задерживались в голове и не формировали никаких образов. Пошел гуглить уроки на ютубчике и нагуглил вот это: https://www.youtube.com/watch?v=xsaRhgD7XL4 Мне нравится и всё понятно. Хорошо, годно рассказывает. На ютубе кастрированная версия, начиная с 2 или 3 урока, так что я спиздил джва платных курса - "Базовый 2013" и "Стартовый 2014"с торрентов. Было не просто найти, они активно выпиливаются, судя по мертвым сцылкам. Ну и, собственно, в этих курсах нет задачек, которые я мог бы позапиливать для закрепления материала. Они мне нужны, так как уже замечаю, что в голове всё в кучу перемешалось, а на практике все запомнится куда лучше.
Значит, у меня к вам две просьбы: 1. Рейтаните уроки, если кто знакомился с ними 2. Посоветуйте, где взять элементарные задачки с решением на темы: логические операции, условные конструкции, циклические конструкции, вот это всё. А то я чот решил закрепить знания, нашел на форуме одну такую задачку, прочитал условие, решил не глядеть ответ, начал решать. Чуть мозгу себе не навернул, пока решал. Мне почему-то пришло в голову решать через if-else то, что надо было решать через while. В ответе решение занимало 5 строчек, если не считать операторных скобок, а я потел так, будто отжимался, а не думал, пока пытался выдрочить вселенную наизнанку, чтобы решить решение своим уебанским методом. Вот по этому мне нужен сборник простых задач именно с решением, чтобы я видел, как надо. Надеюсь на вас, братцы.
>>531597 > Извиняй, обычно все в универе дрочат алгоритмы всякие. Как раз алгоритмы меня в универе не дрочили, проходились по возомжностям языка и все. > С решением же надо. Впрочем, википедия есть.
>>531501 Юнити чтобы игры делать, а не движки. Если хочешь именно на графику подрочить, то обрати внимание на кресты и опенгл. Можно и дх11, но мне опенгл больше нравится. Есть обертка для сишарпа - OpenTK, но это сорт оф извращение, т.к. все равно медленнее выйдет, чем на крестах. С другой стороны, если не ставить себе цель сразу написать свой id tech 6, то можешь написать что-нибудь на этой связке. Там ребята неплохую работу сделали и в отличие от другой обертки опенгл для шарпа (не помню как называется), сделали нормальную поддержку енамов и стандартных дотнет структур, а не тупо перехуярили, сохранив долбоебский систайл.
>>531633 > Юнити чтобы игры делать, а не движки Ну да, я именно игры и хочу. Юнити, на сколько я понял, кресты не поддерживает, там вроде как только сишарп и джава. Как я где-то прочитал, какая-то "своя" джава. Понятия не имею, что под этим имели ввиду. В любом случае, это мой первый скриптовый язык, не считая двух пар по паскалю на первом курсе института, который к кодингу вообще отношения не имеет, и разобравшись с С# будет уже не так сложно асилить и джаву, и кресты. Насколько я понял, они во многом похожи, хотя, опять же, кроме С# еще не пробовал ничего вообще смотреть.
>>531635 А, ну если игры хочешь, то ебись с юнити, чо. В /gd есть живой тред, там можешь советов спрашивать. Я думал ты по компьютерной графике угореть захотел.
>>532423 >По мере изучения делал сорт оф памятки в фотошопе, чтобы в голове всё лучше укладовалось. >Ты ведь такое имел ввиду под шпорами? Спасибо, ты охуенен! Нужно больше шпор!
В 15 студии перестали корректно компилироваться исходники в кодировке win1251. Как исправить? Ручная перекодировка каждого исходника не вариант, их очень много и они разбросаны.
Сап, сишарпач. Возник такой вопрос. Есть одна программа, которая сохраняет скриншоты в таком формате: 00001.jpg 00002.jpg и так далее. Надо по нажатию кнопки эти файлики конвертировать в видео. Чем это лучше делать?
>>532577 Переустановить студию, очевидно же. У меня эта глючная хуйня уже дважды слетала: то отладка не работает, то впф перестает внезапно рисоваться в дизайнере. Я просто в ахуе от этих конченых пидорасов, выпустили сырую бету и нормально. На фоне новостей про анальные зонды в десятке, походу, пришло время перекатываться на моно или вообще на джаву.
>>532937 Вроде разобрался. Сейчас самое сложное - текст. Хочу что бы он был в определенном месте, как бы в лейбле. Т.е. выравнивался автоматичски в зависимости от длинны строки. Можно такое запилить?
>>532967 >на SO соответствующий вопрос появился Зачем, интересно, кому-то вообще нужно было создавать исходники в древней, как говно мамонта, кириллической кодировке винды?
Cтудии до 2008 или даже 2010 сами по умолчанию левые кодировки ставили. Потом умолчанием стал юникод, а сейча все что кроме юникода вообще под нож пустили.
>>533017 Еще скажи что VS юзаешь с русским интерфейсом. А если серьезно, ты бы уже 10 раз мог написать (на том же C#) прогу которая перекодует все cp1251 -> UTF8
Есть тут шарписты с Новосибирска? Куда можно пойти работать за еду? Смотрю вакансии на нгс, кроме академа джунов больше нигде не стажируют. Жил бы там, не было бы проблем.
А ты софт только для пиндосов я смотрю пишешь? У нас ЦА только рашка. Винформс хранит надписи UI в исходниках, проблемы?
Так гемор все это, тем более проект большой, исходники все в TFS хранятся. Затрахаешься коммитить. Надо бы какой нибудь ключик в студии, чтобы она заткнулась и работала как 2013 и не выделывалась.
>>533062 Кстати, проблемы. Надписи надо хранить в ресурсах. Сейчас тебе остается только вернуться обратно на 2013 и ждать патча. Кстати, проблема-то не в студии, а в компиляторе.
>>533062 При переходе с 2010(!) на 15 пришлось поправить только одну букву какой то долбоеб поставил русскую с в названии метода и поменять кодировку в 2-3 файлах. Откуда у вас эти проблемы. нет, не каклькулятор на 50 строк пишем
Ну дык в 2010 вроде исправляться в сторону юникода начали, да и то говоришь тоже пришлось менять. Я помню в середине нулевых студии на попытку ввода значка градусов цельсия все изматерились большими диалоговыми окнами, типа придется сохранять исходник в иникод, вот как его противились.
Посоны, чё такое "Repository Pattern"? Это когда я абстрагируюсь от конкретного поставщика данных, создаю интерфейс вроде IRepository и везде работаю с ним? Ну а потом просто связываю IRepository с конкретным классом, который реализует работу с конкретным хранилищем? Я правильно понимаю? Dependency injection вот это вот всё
>>533537 На всякий случай скажу, что любая ОРМ - уже готовый репозиторий и свои реализации писать не нужно. Точно так же как ты бы не стал писать свой DI контейнер.
>>533547 Object-relational mapping. Но не все орм пригодны для тестов и прочего. Только те, у кого контексты легко стабами заменяются. Иначе все равно придется создавать интерфейс поверх.
Всё бля, Дуров забился под шконку и рыдает как побитая шлюха.
Вот казалось бы хуйня, а я себя прям героем чувствую лол, почти два часа ебался. Ну самое сложное то уже сделано. База данных с контактами подключена, маршрутизация работает. Нахер я вообще запостил? ПРост у меня хорошее настроение, ведь я первый раз за месяц запустил студию и зашел в тредж. Пошлите меня нахуй кто-нибудь.
>>533634 Да я как ребенок радуюсь хеллоуворлду каждый раз. Но это круче хеллоуворлда, там тип и макет страницы, контроллеры всякие, представления какие-то с аргументами, база данных подключена. Крч ОСНОВНАЯ АРХИТЕКТУРА ПРИЛОЖЕНИЯ построена лол.
Ананасы, появился вопрос в академических целях. Допустим имеются несколько (много, для сферического примера) участков кода, которые периодически вызывают метод другого класса, который производит какие-то действия с полями этого класса. При этом этому методу требуются для корректной работы значения полей класса из прошлого вызова, но вызова именно из того же участка кода. Для примера, при каждом вызове метода значение поля класса увеличивается на 1, что-то вроде счетчика количества вызовов из этого конкретного места. Т.е. сделать поля статическими не подходит - там останутся данные из вызовов метода в других местах (счетчик станет общим). Для каждого места, где вызывается метод, хранить инициализированный класс тоже не подходит - в данном сферическом примере этих мест очень много (дублирование кода в огромных количествах). Главное правило - получать/присваивать значения полей класса, из которого вызывается метод, извне нельзя (т.е. они приватные). У кого-нибудь есть идеи? Или просто обоссыте за такой поток сознания.
>525735 Я таки сделал это! Пока что только ультра-альфа версия, но старт уже положен. И сразу вопросы: 1)сильно говнокод? 2)когда происходит конвертация видео, программка подвисает. Нельзя ли эту конвертацию в отдельном потоке запустить? 3)Можно ли как-нибудь обойтись без создания кучи файлов в папке программы?
>>533693 1. Вообще, да. Ты же на впф пишешь. MvvM, все дела. 2. Можно. Создавай поток и запускай ffmpg в нем. 3. Можно. Получаешь последовательность кадров и через буфер пишешь в один файл, который потом отдаешь кодеку. Только не спрашивай как это лучше реализовать на практике. Я не знаю.
>>533703 По сути, основная идея уже реализована, прога делает скрины и конвертирует их в видео. Осталось запилить всякие свистелки-перделки типа настроек.
>>533701 1. У тебя есть вьюшка MainWindow. Создаешь для нее MainWindowViewModel (реализуешь INotifyPropertyChanged), вьюшку привязываешь к вьюмодели и биндишься на ее свойства. Погугли че-нить про wpf mvvm. 2. Есть такой класс Thread. Создаешь метод, в котором будет вызываться обертка ffmpeg, создаешь объект Thread, отдаешь ему ссылку на этот метод и запускаешь тред. Обратно гуй можно через диспатчер обновить. Создаешь колбек, в котором через диспатчер меняешь свойства вьюмодели или самих контролов, и вызываешь его после того, как отработает кодек. Ну, или доки почитай по обертке, может там это реализовано уже.
>>533703 http://getbootstrap.com/css/ Сюда идешь, кароч, смотришь понравившиеся стили (там с примерами) и копипастишь себе в разметку. Если нужна динамика, то идешь в раздел js на том же сайте и делаешь то же самое.
>>533706 >Сюда идешь, кароч, смотришь понравившиеся стили (там с примерами) и копипастишь себе в разметку. Если нужна динамика, то идешь в раздел js на том же сайте и делаешь то же самое. Ахренеть, спасибо. Во я мудак слепой.
Шарпач, как заставить сокет слушать диапазон портов? Биндить на каждый нужный порт IPEndPoint? Что за говно? Есть же IPAddress.Any, так почему нельзя нормально диапазон портов взять?
>>533773 > не вижу необходимости У меня столько пакетов в секунду идет, что пришлось побайтоёбить, а иначе аж файфай колбасило. Лепить туда еще и id устройства не лучший вариант. Лучше костыль воткну с 10 биндингами.
Ну ебаный в рот, эти индусы просто вымораживают. Почему-то через раз стало выкидывать из студии в BSOD с ошибкой PROCESS_HAS_LOCKED_PAGES при остановке отладки. Я ни с какими драйверами не работаю, явно индусы поднасрали.
>>534421>>533791>>533792>>533824 Я предполагал, что хранить изображения в базе не логично, просто в учебнике так делается, вот и решил спросить.
Как работает Url.Content()? Когда я вызываю в представлении что-то вроде Url.Content("~/Content/1.jpg") то путь ищется в директории проекта. Если же вызвать то же самое в контроллере, то он ищет папку Content на диске C, чяднт?
Сап, аноны. Есть приложение для Windows Phone 8.0 и контрол CommandBar (панель с кнопками внизу девайса). Не работают события Opened и Closed при открытии/закрытии этого самого коммандбара нажатием на устройстве. Эти ивенты генерируют события только если изменить состояние из кода (CommandBar.IsOpen = true/false). Может кто знает как победить эту парашу?
>>533693 У тебя класс, отвечающий за скриншоты, хуево спроектирован. Читай про SOLID и думай что будет, если понадобится сохранять картинки не на диске, а в облаке, например.
>>534567 Какое облако, лол. Сейчас фабрику абстрактных скриншотосохранятилей запилит для одного единственного кейса. Вспоминая про солид, не забывай про кисс.
>>534723 ValueType overrides the virtual methods from Object with more appropriate implementations for value types. See also Enum, which inherits from ValueType. Data types are separated into value types and reference types. Value types are either stack-allocated or allocated inline in a structure. Reference types are heap-allocated. Both reference and value types are derived from the ultimate base class Object.
Котаны, в общем дали тестовое задание: на основе GZipStream запилить многопоточный архиватор. Суть именно в том, чтобы многопоточно сжимать один файл, а т.к. GZipStream - поток, то распараллеливание получается неочень(т.к. параллельно писать в один поток не получается, точнее может и получается, но тогда порядок блоков нарушается). Пробовал читать блоками, сжимать каждый блок отдельно и писать в файл по порядку - 7zip не распаковывает, да еще и размер файла в итоге растёт. Синхронная реализация (доработанный пример с мсдн) работает отлично во все стороны. Есть у кого идеи как можно распараллелить? Или может я что-то не понимаю в тонкостях GZip?
ITT элита продолжает обсуждает будущее этого поистине прекрасного и современного продукта компании Microsoft. Только в этом треде элитные разработчики ответят на самые острые вопросы индустрии.
Скачать VS2015: https://www.visualstudio.com/en-us/products/vs-2015-product-editions.aspx
Что почитать:
- C# Yellow Book (для ньюфагов, книга полностью бесплатная)
- Joseph Albahari и Ben Albahari - C# 5.0 in a Nutshell (на русском: C# 5.0, Справочник. Полное описание языка)
- Pro C# 5.0 and the .NET 4.5 Framework (Andrew Troelsen)
- Jon Skeet - C# in Depth (на русском: C# для профессионалов. Тонкости программирования)
- Jeffrey Richter - CLR via C# (на русском: Программирование на платформе Microsoft .NET Framework 4.5 на языке C#)
- Writing High Performance .NET Code (Ben Watson)
- Pro WPF 4.5 in C# (Matthew MacDonald)
- Windows Presentation Foundation 4.5 Cookbook (Pavel Yosifovich)
Что посмотреть:
- Programming with C# - https://www.edx.org/course/programming-c-microsoft-dev204x-0
- Beginning Game Programming with C# - https://www.coursera.org/course/gameprogramming
- C# Fundamentals: Development for Absolute Beginners - https://channel9.msdn.com/Series/C-Sharp-Fundamentals-Development-for-Absolute-Beginners
Ресурсы:
- http://stackoverflow.com/questions/tagged/c%23
- http://www.tutorialspoint.com/csharp/
- http://professorweb.ru
- http://net-informations.com
- http://habrahabr.ru/hub/csharp/
Онлайн-компиляторы:
- https://dotnetfiddle.net/
- http://csstub.com
- http://www.tutorialspoint.com/compile_csharp_online.php
FAQ
Q: Где и какую студию брать для работы?
Для большинства задач подойдет Community версия. Она бесплатная и скачивает из сети только указанные компоненты. Скачать можно тут - https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx
Q: Что с IDE для других систем?
Самый юзабельный вариант - MonoDevelop (http://www.monodevelop.com/download/)
Для vim можно использовать OmniSharp (https://github.com/OmniSharp/omnisharp-vim)
Обзор Roslyn: https://github.com/dotnet/roslyn/wiki/Roslyn%20Overview
Новые возможности C# 6.0: https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
Прошлый тред тонет тут: http://2ch.hk/pr/res/516185.html