• Как очистить память, занятую списком C#?

    GavriKos
    @GavriKos
    Убрать все ссылки на него, а потом сделать GC.Collect
    Ответ написан
    7 комментариев
  • Законно уйти с UpWork?

    @Stalinko
    PHP'шник и фрилансер до мозга костей
    Оно вам надо так заморачиваться?
    Заказчики приходят и уходят, а аккаунт на Upwork дорого стоит. Тем более подработка может потребоваться в любой момент.

    Просто молча работайте вне Upwork и всё. Главное, не обсуждайте это в чате ;) Контракт можно закрыть с пометкой "работа выполнена успешно".
    Ответ написан
    Комментировать
  • Как ждать в цикле?

    Therapyx
    @Therapyx
    Data Science
    Translate...
    yield WaitForSeconds (1);
    Translate...
    Ответ написан
    4 комментария
  • Как написать свойство c get и set для двумерного массива?

    @OwDafuq
    Пределы - константы, то:
    const int Size1 = 10;
    const int Size2 = 20;
    
    int[,] matrix;
    public int[,] Matrix
    {
    	get => matrix;
    	set
    	{
    		if (value.GetLength(0) > Size1 || value.GetLength(1) > Size2)
    		{
    			Console.WriteLine("Матрица вышла за пределы 10х20");
    		}
    		else matrix = value;
    	}
    }
    Ответ написан
    Комментировать
  • Хочу зарегаться на апворк. Что следует сделать до регистрации, а чего делать не стоит вовсе?

    an-tar
    @an-tar
    Full stack web developer
    Все просто - зарегистрироваться со своими реальными учетными данными, пройти верификацию, быть готовым ответить на вопросы со стороны Upwork. Прочитать правила использования сервиса, согласиться и не нарушать их.

    Чего не стоить делать - использовать неверные данные или регистрироваться за кого-то; переманивать клиентов с апворка, работать из территорий, откуда работа запрещена согласна законодательству US (Иран, Корея, Крым и др. злачные места - см. правила сервиса); хитрить с клиентами, халтурить со временем и качеством выполненных работ.
    Ответ написан
    Комментировать
  • C# vs Php. Что выбрать?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вы вроде уже расписались в любви к шарпу... (сам буквально вчера поднял Unity и теперь смотрю, с какого боку его грызть начать ;))

    что держит? думы о трудоустройстве? чем дальше от мегаполисов, тем больше шансов быстрее подзаработать на "пыхе", и сложнее найти приличную работу на шарпе. но в столицах, думаю хорошие шансы и шарпистом устроится + шансы, что трудоустройство будет допускать хорошие, даже лучшие чем у пыха, перспективы роста (корпоративный сектор же ;) .. (другой вопрос - иметь шансы и реализовать их - не одно и тоже, это всегда зависит от человека ;))
    Ответ написан
    1 комментарий
  • C# vs Php. Что выбрать?

    @tiqq
    По личному опыту скажу, что C# и Visual Studio - это самый эстетически приятный тандем из всех, с которыми приходилось работать. C# прост, понятен и элегантен настолько, насколько это возможно.

    Касательно перспектив:

    Если в Ваших планах карьера программиста, то я бы однозначно посоветовал C# и .NET. Так как .NET-программистов значительно меньше, чем php-разработчиков, как следствие зарплаты значительно выше(но и вакансий меньше). Так же безусловным плюсом является то, что в случае с C# Вы не ограничены лишь веб-приложениями: на C#, помимо веб приложений, пишутся десктопные приложения, мобильные кроссплатформенные приложения(Xamarin), игры, о которых Вы упомянули, а это значит, что если, к примеру, какое-то направление Вам пришлось не по душе, Вы за гораздо меньшее время сможете переквалифицироваться. В случае же с php Вы имеете дело только с веб-приложениями.

    Если же Вы видите себя в будущем исключительно веб-ориентированным программистом, то, возможно, следует рассмотреть php. Бэкенд большинства веб-сайтов(особенно относительно простых) пишется именно на php, и, скажем, без работы Вы точно не останетесь, хоть и за в среднем меньшие деньги, чем если будете C#-программистом.

    Итог: я бы посоветовал C#. Погружайтесь в платформу .NET и становитесь экспертом. Удачи)
    Ответ написан
    3 комментария
  • C# - Как сделать выборку из текста?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    https://www.newtonsoft.com/json

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

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

    ps можно еще ленивый вариант - Split по
    {"userId":"
    тогда первый элемент отбрасываем, все остальные начинаются с искомой величины, надо только хвост
    "} bla-bla-bla
    отрубить

    ps держите прототип, содержит все 3 упомянутые подхода, но перфоманс можно сравнить только на реально больших данных )).. (но на больших данных могут и баги полезть ;)

    spoiler

    вопрос понравился, и выдалось время.. хотя и не за 15 минут, врать не буду, часа полтора порядка 45 минут ушло на заковырки )) в основном с json (мало опыта)

    upd и уже исправлено - была заготовка класса для частичной json выборки, но она не нужна

    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace parsejson111
    {
        class Program
        {
            const string data = "{\"anchor\":\"aaabbbccc==\",\"members\":[{\"userId\":\"111\"},{\"userId\":\"2222\"},{\"userId\":\"333\"},{\"userId\":\"444\"}],\"has_more\":true}";
            // фишки замера заложены, но разница может проявиться только на больших объемах ))
    
            static void Main(string[] args)
            {
                Console.WriteLine("data:");
                Console.WriteLine(data);
    
                var sw = new Stopwatch();
                sw.Start();
                var ts = sw.Elapsed; // лень объявлять тип
    
                json();
                hand();
                lazy();
    
                sw.Stop();
                Console.WriteLine("press any key to continue...");
                Console.ReadKey();
    
                void json() // возможно существует более элегантный вариант. тут у меня опыта мало ))
                {
                    sw.Reset();
                    Console.WriteLine("... json");
                    var j = JObject.Parse(data);
                    var r = j["members"].Children().ToList();
                    foreach (var u in r)
                    {
                        var uid = JObject.Parse(u.ToString());
                        var id = uid["userId"].Value<string>();
                        Console.WriteLine(id);
                    }
                    ts = sw.Elapsed;
                    Console.WriteLine($"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}");
                }
    
                void hand() // зато тут гарантирую - оптимизировать лучше не реально, и по перфомансу вряд ли можно лучше ))
                {
                    sw.Reset();
                    Console.WriteLine("... hand");
                    var p = 0;
                    while ((p = data.IndexOf("{\"userId\":\"", p)) > 0)
                    {
                        p += 11; //длина шаблона. заодно избегаем риска зацикливания
                        var f = data.IndexOf("\"}", p);
                        Console.WriteLine(data.Substring(p, f - p));
                    }
                    ts = sw.Elapsed;
                    Console.WriteLine($"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}");
                }
    
                void lazy()
                {
                    sw.Reset();
                    Console.WriteLine("... lazy");
                    var t = data.Split(new string[] { "{\"userId\":\"" }, StringSplitOptions.RemoveEmptyEntries);
                    for (var i = 1; i < t.Length; i++) // здесь и везде - обработка пустого множества на вашей совести
                    {
                        var id = t[i].Split(new string[] { "\"}" }, StringSplitOptions.RemoveEmptyEntries);
                        Console.WriteLine(id[0]);
                    }
                    ts = sw.Elapsed;
                    Console.WriteLine($"\t{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds:000}");
                }
            }
        }
    }

    Ответ написан
    Комментировать
  • На что я могу рассчитывать с такими навыками?

    customtema
    @customtema
    arint.ru
    1. Опубликуйте резюме на HH. Вы получите несколько предложений. Сделайте это до переезда. На первую попавшуюся вакансию не соглашайтесь, поговорите с разными людьми.
    2. В этой профессии очень важно постоянно учиться. Tuts+, есть еще очень много мест, где можно продолжать учиться онлайн.
    Ответ написан
    8 комментариев
  • Как заставить метод падать с исключением?

    @ProTreo
    entity = new T();

    Это не смущает ?
    Экземпляр объекта создан, переменная не будет null
    Ответ написан
    1 комментарий
  • Как заставить метод падать с исключением?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    public void Save(T entity)
    {
        if (entity == null)
            throw new ArgumentNullException(nameof(entity));
    
        AllItem.Add(entity);
    }
    Ответ написан
    Комментировать
  • Жив ли еще wcf?

    Morpheus_God
    @Morpheus_God
    Аналоги есть. Web Api, SignalR. А вот жив ли он, решать вам. Документация есть. Новых фич там нет, так как Майкрософты ее не развивают с 2010 года.
    Ответ написан
    2 комментария
  • Жив ли еще wcf?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    1 комментарий
  • Смысл интерфейса (не GUI) и зачем он вообще нужен?

    Griboks
    @Griboks Куратор тега C#
    Интерфейс - иной уровень абстракции. Это более продвинутое программирование на уровне что надо сделать, а не как надо сделать.
    Как использовать библиотеку? Как связать две программы, два разных куска когда? Как заложить гибкость в проект? Как предусмотреть модернизацию программы? Надо использовать интерфейс.
    Ответ написан
    Комментировать
  • Смысл интерфейса (не GUI) и зачем он вообще нужен?

    Morpheus_God
    @Morpheus_God
    Простой пример. У вас есть какая то программа которая должна передавать отчет. Сегодня вы реализовали класс с сохранением в файл, а завтра вам надо будет переслать этот отчет другим способом. И каждый раз будете писать новый класс переписывая логику программы? Зачем. Когда создается интерфейс и при передаче отчета куда либо будет использоваться метод интерфейса. А вот как уже он будет реализован это дело десятое. Главное, что метод для передачи нужных данных будет четко задан за счет интерфейса.
    Интерфейс это четкий набор методов для реализуемого его класса или структуры, требуемый в программе. И дело тут не в команде программистов.
    Вот один из паттернов в котором применяются интерфейсы, где вызывается конкретный метод а за его реализацию отвечает совсем другая часть программы.
    Ответ написан
    4 комментария
  • Как организовать доступ к web api?

    EreminD
    @EreminD
    Кое-что умею
    Ответ написан
    Комментировать
  • Как уничтожаются объекты значимых типов?

    Nipheris
    @Nipheris Куратор тега C#
    1. В теории реализация не обязана использовать стек для хранения локальных объектов value-типов (см. https://blogs.msdn.microsoft.com/ericlippert/2009/... ).
    2. Тем не менее, в текущих реализациях используется именно стек, поэтому всё как и в остальных языках: https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D... .
    3. Помните, что значения value-типов иногда (не всегда) хранятся на стеке. Все значения value-типов, являющиеся частью объекта ссылочного типа (например, int-поле в классе или элементы массива double) рождаются и умирают вместе с этим объектом.

    Итого:
    • время жизни локальных объектов value-типов связывается с фреймом стека;
    • время жизни объектов value-типов, находящихся в составе объектов reference-типов, связывается с временем жизни объемлющего объекта;

    Более экзотические ситуации рассматривать не будем. И вообще, как говорит Липперт (см. ссылку), лучше не думать в терминах стека, т.к. это деталь реализации. Лучше говорить о времени жизни относительно вызываемых функций и относительно других объектов.
    Ответ написан
    1 комментарий
  • Нужны ли разработчики .Net?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - просто что то делайте, это лучше чем ни чего. если делаете за деньги - вы уже растете. но в любом случае, постоянно что то делайте )).. и лучше разное ))

    2 - смотрите статистику вакансий по языка/платформам. .Net разработчики нужны точно. мало того, конкурирует обычно только java. но вроде, недавно, на хабре, пролетал обзор, что в США, спрос на .Net/C# уже начал перевешивать
    Ответ написан
    Комментировать
  • Нужны ли разработчики .Net?

    GavriKos
    @GavriKos
    Дабы что-то представлять что-то из себя, придя на собеседование.

    Открываете вакансии и читаете, что требуется от кандидата. Все просто.
    Ответ написан
    Комментировать
  • Верно ли понимаю TPL и асинхронность?

    Nipheris
    @Nipheris Куратор тега C#
    1. Да, задача может исполниться где угодно. Более того, вы не поверите, но некоторые таски вообще могут нигде не исполняться, т.к. исполнять нечего (см. п. 5). Таск - это прежде всего абстракция значения, которое будет получено в будущем, и для получения которого возможно нужно что-то посчитать или просто подождать. См. futures and promises.
    2. Ну не обязательно в новом потоке, может быть выполнится и в существующем потоке если в пуле потоков есть свободный.
    3. Асинхронные операции ввода-вывода называются так потому, что выполняются через асинхронное API операционной системы. Нет никакого смысла использовать асинхронную операцию, но делать это в отдельном потоке созданном специально для этой операции. Потоки нужны прежде всего для того, чтобы эффективно нагружать исполнителей, т.е. процессоры (в том числе разные их ядра).
    4. Можно в новом, можно в потоке из пула. Так или иначе, если операция предполагает именно расчёты, а не ожидание ввода/вывода, то безусловно это тот случай, когда имеет смысл переложить нагрузку на другой поток.
    5. Если представлять таск как одну из сторон "трубы", по которой прилетит результат асинхронной операции, то Task - это принимающая сторона, а TaskCompletiotionSource - передающая (производящая результат) сторона. Когда вы создаёте таск из кода который нужно выполнить, этот код становится передающей стороной. Но Task абстрагирует любую асинхронную операцию, не только ту где нужно долго что-то считать. Возможно вам нужно дождаться одного байтика из сети, и операция будет считаться завершенной. Во всех тех случаях, когда вы хотите самостоятельно "произвести" результат для какого-то таска (а сам таск отдать "наружу" другому коду, например вернуть из функции), вы можете использовать TaskCompletionSource.
    (Кстати, в C++ принимающая сторона называется future, а передающая (производящая) - promise. В JS принимающая сторона называется Promise, а передатчиком является функтор).
    Ответ написан
    1 комментарий