Ответы пользователя по тегу C#
  • Как исправить ошибку CS1555?

    @spaceatmoon
    функция Main не должна сама себя вызывать. Это бред полный. Напишите так и будет вам счастья.
    public class Program
    {
            public static void Main(string[] args)
            {
            }
    }
    Ответ написан
  • Как работает косвенное обращение в WPF Storyboard?

    @spaceatmoon
    Ответы:
    https://coderedirect.com/questions/533715/round-br...
    https://stackoverflow.com/questions/3737458/why-do...

    Storyboard.TargetProperty="Background.Color"
    Программе заранее известен этот объект и будет связан с другим кодом на этапе компиляции.

    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"


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

    https://metanit.com/sharp/wpf/13.php
    Ответ написан
    Комментировать
  • Как получить значение из адреса в памяти?

    @spaceatmoon
    Пробовал этот гайд?
    https://www.codeproject.com/Articles/670373/Csharp...

    Только вот программу замени на эту. OllyDbg сильно устарела и не работает с 64 битными программами.
    https://x64dbg.com
    Ответ написан
    Комментировать
  • В чeм разница и как правильно сделать?

    @spaceatmoon
    Для одиночного вызова разницы никакой. Однако по логике, вызов конструктора намного сильнее тормозит программу, нежели просто вызвать функцию Next.

    DateTime timeStart = DateTime.Now;
    for (int i = 0; i < 10000; i++)
    {
        int random = new Random().Next(1, 10);
    }
    DateTime timeStop = DateTime.Now;
    Console.WriteLine("new Random().Next(1, 10) - {0}", timeStop - timeStart);
    //
    timeStart = DateTime.Now;
    Random random1 = new Random();
    for (int i = 0; i < 10000; i++)
    {
        int dig = random1.Next(1, 10);
    }
    timeStop = DateTime.Now;
    Console.WriteLine("random.Next(1, 10) - {0}", timeStop - timeStart);

    new Random().Next(1, 10) - 00:00:00.0209561
    random.Next(1, 10) - 00:00:00.0001170
    Ответ написан
    2 комментария
  • Как упростить код в один метод c#?

    @spaceatmoon
    Что мешает сделать так?
    public static void Move(Robot robot, int width, int height, Direction direct)
            {
                for (int i = 0; i < width - 3; i++)
                    robot.MoveTo(direct);
            }
    Ответ написан
  • Как указать контекст для Razor страниц?

    @spaceatmoon Автор вопроса
    Обновил VS 2019 до версии 16.11.3. Проблема ушла.
    Ответ написан
    Комментировать
  • Требуется код ревью. Как правильно составить логику меню?

    @spaceatmoon
    Из очевидного на мой взгляд:
    1. Нет валидации, а лучше вообще не давать заполнять произвольными данными. Лучше заменить на словарь где в консоли вместо "Введите должность" будет "Выберете из предложенных вариантов" и напротив каждой должности своё число.
    public void SetNewPos()
            {
                Console.Write($"Введите должность для {Fullname}\nТекущая: {Position}\nНовая: ");
                this.Position = Console.ReadLine();
            }

    2. Тоже самое для статусов пункт 1.
    3. Вместо простых типов используй объекты для валидации
    private BirthdateFormat Birthdate { get; set; }   //Дата рождения
            private FullnameRules Fullname { get; set; }    //ФИО
            private Department DepartmentCode  { get; set; }  //Отдел
            private CompanyPosition Position { get; set; }    // Должность
            private int Salary { get; set; }         //Зарплата
            private int Expirience { get; set; }     //Стаж
            private StatusDict Status { get; set; }      //Состояние

    Вместо отдельных классов типа StatusDict можно их сделать enum, но тут всё равно нужна валидация
    public class A {
    		
    		public StatusDict StatusCode {get; set;}
    	
    		public enum StatusDict
    		{
    			Open = 1,
    			Close
    		}
    		
    		public A(int code)
    		{
    			StatusCode = (StatusDict)code;
    		}
    	}

    4. Не делай так. Это бессмысленная операция. При объявленных типах там и так будет 0, "", false в зависимости от типа. Да и вообще эта перегрузка создаёт дыру в системе, где неопределённый сотрудник с такими значениями плавает в базе.
    public Employee()
            {
                this.Fullname = "0";
                this.Department = "0";
                this.Salary = 0;
                this.Expirience = 0;
                this.Position = "0";
                this.Birthdate = "0";
            }

    5. Очень плохо.
    //Бесконечный цикл для работы меню
                for (; ; )

    Не сильно знаком с C#, возможно куратор подскажет. Я бы заменил на goto и дело с концом;
    Repeat:
                var key = Console.ReadKey();
                if (key.KeyChar == '1' || key.KeyChar == '3')
                {
                    return;
                }
                else
                {
                    goto Repeat;
                }

    7. Много шаблонного кода.
    8. Нет проверок на выход за пределы границ массивов
    9. При вводе такой строки 1,2,бобёр валится ошибка. Нет валидации.
    Convert.ToInt32(Console.ReadLine());
    10. Зачем в коде очевидные комментарии? Комментировать нужно сложные вещи.
    Попробовал облегчить твоё меню. Могу отметить, что зная меню, можно спуститься сразу на нужный этаж.
    Repeat:
                Console.Clear();     //Очищает консоль после отработки функции
                string input;
                string currentLevel;
                Console.WriteLine("Выберите функцию");
                Console.WriteLine("1 Получить информацию");
                Console.WriteLine("2 Изменить должность");
                Console.WriteLine("3 Измеить отдел");
                Console.WriteLine("4 Изменить стаж");
                Console.WriteLine("5 Изменить зарплату");
                Console.WriteLine("6 Изменить статус");
                Console.WriteLine("0 Выход");
                //Двух уровневое меню реализованное c помощью линейного switch
                currentLevel = "";
                Command:
                //input = Console.ReadLine();
                currentLevel += Console.ReadLine();
                Console.WriteLine(currentLevel);
                switch (currentLevel)
                {
                    case "1":
                        Console.WriteLine("Выберите количество \n1 Все \n2 Один \n3 Несколько");
                        goto Command;
                    case "11":
                        for (int i = 0; i < Employers.Length; i++)
                        {
                            Employers[i].PrintInfo();
                            Console.WriteLine("___________________________");
                        }
                        Console.ReadKey();  //Костыль который не позволяет моментально очистить вывод
                        break;
                    case "12":
                        int c12input;
                        for (int i = 0; i < Employers.Length; i++)
                        {
                            Console.Write(i + 1 + " ");
                            Employers[i].PrintName();
                        }
                        Console.WriteLine("Выберите сотрудника");
                        c12input = Convert.ToInt32(Console.ReadLine());
                        Employers[c12input - 1].PrintInfo();
                        Console.WriteLine("___________________________");
                        break;
                    case "13":
                        Console.WriteLine("Выберите сотрудника");
                        Console.WriteLine("0 для возврата в предыдущее меню\n-------");
                        for (int i = 0; i < Employers.Length; i++)
                        {
                            Console.Write(i + 1 + " ");
                            Employers[i].PrintName();
                        }
                        Console.WriteLine("___________________________");
                        int c13input;
                        while ((c13input = Convert.ToInt32(Console.ReadLine())) != 0) //пока не введен 0, можно вводить индексы сотрудников
                        {
                                Employers[c13input - 1].PrintInfo();
                                Console.WriteLine("___________________________");
                        }
                        break;
               }
              goto Repeat;
    Ответ написан
    2 комментария
  • Какая самая перспективная и востребованная отрасль в С#?

    @spaceatmoon
    Вначале писал как ответ на ваш вопрос про разные языки и решил отдельным ответом сделать.


    Со своей стороны скажу php, он очень востребован. Простой язык, половина возможностей носят рекомендательный характер и сильно зависит от команды, в частности от их силы в программирование. Мне попадались хорошие ребята, а попадали очень не очень, но всё конечно же зависит от ваших навыков.

    Минус PHP в отсутствии однородности экосистемы. В РФ есть 3 главных фреймворка Symfony, Laravel, Yii2 и дальше 0.5% другие. Каждый из них тянет лямку на себя и составляют долю по грубому 33%. Каждый фреймворк богат на возможности, решают одну и туже проблему, но это всё равно что react/vue/angular. Свои подходы, методы и быть профессионалом в каждом нельзя. Соответственно список вакансий уже не такой большой как кажется, ведь потом явно появится какое-то предпочтение. Например у меня в blacklist однозначно стоит Yii2.

    Также минус PHP в его направленности чисто на веб. Рано или поздно устаешь и хочешь возможности сделать обычное Windows приложение, игру, бинарник. Ведь PHP сильно зажат в этом плане, даже не так, там в принципе ничего нет на эту тему и не будет никогда. Только веб, но он прекрасен местами.

    Ещё можно рассмотреть Python/Django.

    В любом случае стоит ориентироваться на удалённую работу если вы не в СПБ и Москве. Лично в моём мухосранске какую технологию не выбери, максимум 1-3 контора нормальная. Остальные что-то мутят или в подвале сидят.

    Выбирай по зову сердца, иначе тошнить уже будет на 2 неделю. Я сейчас изучаю C# в частности asp.net, wpf. Даже по этим направлениям информации выше крыши.
    Ответ написан
    Комментировать
  • Как дождаться загрузки YouTube selenium + phantom.js (c#)?

    @spaceatmoon
    По скриншотам всё у тебя находит. У тебя искомый элемент динамический и подгружается отдельно. Тем более у тебя нет проверки на количество элементов.

    using OpenQA.Selenium;
    using OpenQA.Selenium.Firefox;
    using OpenQA.Selenium.Support.UI;
    ....
    ....
    ....
    using (IWebDriver driver = new FirefoxDriver())
                {
                    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
                    driver.Navigate().GoToUrl("https://www.youtube.com");
                    wait.Until(web => {
                        var result = driver.FindElements(By.CssSelector("ytd-rich-item-renderer"));
                        return result.Count > 70;
                    });
                    var result = driver.FindElements(By.CssSelector("ytd-rich-item-renderer"));
                    foreach (var element in result)
                    {
                        Console.WriteLine(element.Text);
                    }
                }


    Я попробовал так. Когда я скролю браузер, подгружаются элементы и как только их становится больше 70 тут же переходит к следующему блоку кода.
    Ответ написан
    Комментировать
  • Код не идёт дальше в c#?

    @spaceatmoon
    В вашем коде кто первый бьёт, тот и выигрывает по сути. Также у вас будет бесконечным цикл пока первый и второй не промахнётся по цели.

    Я попробовал переписать часть с битвой, чтобы одинаково рандомно каждый из игроков бил за один ход другого.
    // процесс битвы
    		while(true)
    			{
    				randatk1 = rnd1.Next(0,101);
    				randatk2 = rnd1.Next(0,101);
    				Console.WriteLine("h1 = " + hp1);
    				Console.WriteLine("h2 = " + hp2);
    				Console.WriteLine("Current chance h1 = " + randatk1);
    				Console.WriteLine("Current chance h2 = " + randatk2);
    				
    				if (randatk1 > randatk2)
    				{
    					if (randwar1 > randatk1){
    						hp2 = hp2 - 1;
    						Console.WriteLine("atack player 1");
    					}
    				}
    				else
    				{
    					if (randwar2 > randatk2){
    						hp1 = hp1 - 1;
    						Console.WriteLine("atack player 2");
    					}
    				}
    			
    				Console.WriteLine("All attacks repelled");
    				if (hp1 <= 0 || hp2 <= 0)
    				{
    					if (hp1 <= 0)
    					{
    						Console.WriteLine("2 team win");
    					}
    					else
    					{
    						Console.WriteLine("1 team win");
    					}
    					break;
    				}
    				
    			}
    Ответ написан
    Комментировать