Задать вопрос
  • Стоит ли изучать c++11?

    longclaps, ты так говоришь, как будто новые возможности языка - это какая-то ерунда, которую можно потом непонятно как самому отдельно доучить и это будет легко и просто. Проще, чем сразу читать книгу. И как будто есть какая-то книга, но только по С++ 11, а новее книг нет нормальных, они все настолько плохие, что придётся читать её. Я знаю книгу по С++ 17, которая точно нормальная.
  • Стоит ли изучать c++11?

    longclaps, ну так учи С++ 98. Потом С++ 20 наверстаешь.
  • Стоит ли изучать c++11?

    Очевидно же, что нужно учить самую старшую версию языка, по которой есть книга.
  • Unity 2d не работает скрипт c#, что делать?

    Пару советов:
    • Не используй для именования полей сокращения в духе rb и прочие плохие названия.
    • Поля, которые ты хочешь отобразить в инспекторе должны быть помечены как [SerializeField] private, а не public. Вообще public поля - это плохой подход.


    Вот так твой класс должен выглядеть (именование и оформление, речь не о самом коде/алгоритме):
    using UnityEngine;
    
    namespace Assets.Scripts
    {
        public class PlayerController : MonoBehaviour
        {
            private float moveInput;
            private Rigidbody2D rigidbody;
    
            [SerializeField] private float speed;
            [SerializeField] private float jumpForce;
    
            private void Start()
            {
                rigidbody = GetComponent<Rigidbody2D>();
            }
    
            private void FixedUpdate()
            {
                moveInput = Input.GetAxis("Horizontal");
                rigidbody.velocity = new Vector2(moveInput * speed, rigidbody.velocity.y);
            }
        }
    }
  • Unity 2d не работает скрипт c#, что делать?

    Только что проверил. Нормально отображается в инспекторе speed и jumpForce. А вот ошибка в названии метода есть. Не FixUpdate, а FixedUpdate нужно назвать.
  • Стоит ли бросать кастомные ошибки, если этити не найдено в API?

    Вы читали в чём его проблема? Он думает, что конкатенация выполняется всегда, даже если условие не срабатывает.

    Он написал:
    Еще и джава будет конкатенировать стринги, которые я передаю в ошибку, даже если ошибки не произошло.


    И как здесь поможет String.format и сокрытие конкатенации или String.format в конструктор, который, вероятно, ещё и тяжелее, чем обычная конкатенация? Я пишу потому что мне стало интересно, что никто не понимает проблему автора конкретно про конкатенацию.
  • Стоит ли бросать кастомные ошибки, если этити не найдено в API?

    Руслан ., ну вот. Автора парит конкатенация, которая срабатывает только тогда, когда должна сработать. Я так понял, что его не сам факт конкатенации беспокоит (хоть это совершенно не проблема), а то, что она якобы выполняется при любом вызове метода. Я так понял.

    Он пишет:
    Еще и джава будет конкатенировать стринги, которые я передаю в ошибку, даже если ошибки не произошло.
  • Стоит ли бросать кастомные ошибки, если этити не найдено в API?

    А разве в Java строки конкатенируются, если этот код не выполняется?
  • Как организовать Update в window forms?

    С такой скоростью лучше не обновлять UI. Никакой Update вызывать ненужно.
  • Как удалить одинаковые строки в файле, при этом оставить одну из них?

    edward_freedom, ну а лучший ответ не многим лучше. В Linq методе используется HashSet{T} (угловые скобки здесь не написать), что почти одно и тоже, чуть тяжелее словарь только. Я это к тому, что вариант, может и не уместный в силу того, что у словаря не будет использоваться значение, но вот для создания уникального списка используется в Linq тот же принцип. Я бы сказал, вариант слегка неуместный :)
  • NullReferenceException: Object reference not set to an instance of an object когда запускаю методы из другого скрипта. как быть?

    Ещё не мешало бы сделать все поля [SerializedField] private fieldName; и назвать поле player.
  • Почему иногда текст 2 раза пишется, а не 1 раз?

    Дядя Богдан, во время дебага может пригодиться тебе окно Threads. Чтобы его найти там, ты должен быть в режиме отладки. 610c252f36c40277510577.png
  • Почему иногда текст 2 раза пишется, а не 1 раз?

    Дядя Богдан, слегка поправил код. Прям совсем немного. В идеале там всё нужно вынести в отдельный класс, который будет работать со сторонним сайтом. А форма это просто то, что будет использовать этот класс, иначе перенос хотя бы на WPF будет болью.

    Очень много лишних действий в коде, которые повторяются. Я бы всерьёз задумался над тем, чтобы хотя бы пытаться писать код правильно. Первое правило: Никакого дублирования кода никогда, даже если лень. И уж тем более не нужно делать вычисление для проверки на null, потом снова его вызывать, чтобы что-то ещё проверить и третий раз, чтобы получить данные, это выглядит страшно. И зачем ты скрываешь метод Update? Это точно не нужно делать.

    Почитай хорошую книгу: Принципы, паттерны и методики гибкой разработки на языке C# | Мартин Роберт С., Мартин Мика.

    Дебажить многопоточный код та ещё задача. Просто логируй важные места. Я здесь использовал Debug.WriteLine, но ты можешь установить нормальный логгер, например, NLog или Serilog.

    Когда будешь проверять, посмотри в окно Output, там и увидишь в чём была проблема

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Net;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using AngleSharp.Dom;
    using AngleSharp.Html.Dom;
    using AngleSharp.Html.Parser;
    using CefSharp;
    using CefSharp.OffScreen;
    
    namespace Arbitr
    {
        public partial class MainForm : Form
        {
            private const string DefendantsSelector = "#gr_case_partps > table > tbody > tr > td.defendants > div > ul > li:nth-child(1) > span";
            private const string PlaintiffsSelector = "#gr_case_partps > table > tbody > tr > td.plaintiffs.first > div > ul > li:nth-child(1) > span";
    
            private readonly HtmlParser parser = new HtmlParser();
            private readonly string url = "https://kad.arbitr.ru/Card?number=";
            private ChromiumWebBrowser browser;
            private IHtmlDocument angle;
    
            public MainForm()
            {
                InitializeComponent();
                InitializeChromium();
    
                browser.FrameLoadEnd += OnWebBrowserFrameLoadEnded;
            }
    
            private void InitializeChromium()
            {
                var settings = new CefSettings();
                Cef.Initialize(settings);
                browser = new ChromiumWebBrowser();
            }
    
            private void OnWebBrowserFrameLoadEnded(object sender, FrameLoadEndEventArgs e)
            {
                Debug.WriteLine($"{nameof(OnWebBrowserFrameLoadEnded)}. Frame.IsMain: {e.Frame.IsMain.ToString()}; e.Url: {e.Url};");
    
                if (e.Frame.IsMain && e.Url.Contains(url))
                {
                    Invoke((MethodInvoker)(async () =>
                    {
                        await UpdateData();
                    }));
                }
            }
    
            private void OnFindButtonClick(object sender, EventArgs e)
            {
                ClearTextInLabel();
    
                browser.Load($"{url}{WebUtility.UrlEncode(textBox1.Text)}");
            }
    
            private async Task UpdateData()
            {
                Debug.WriteLine($"{nameof(UpdateData)}.");
    
                ClearTextInLabel();
    
                string html = await browser.GetSourceAsync();
    
                if (!string.IsNullOrEmpty(html))
                {
                    angle = parser.ParseDocument(html);
    
                    var defendantsElement = angle.QuerySelector("#gr_case_partps > table > thead > tr > td.defendants > div");
    
                    if (defendantsElement != null)
                    {
                        if (defendantsElement.TextContent.Trim() == "Ответчики")
                        {
                            Debug.WriteLine($"{nameof(UpdateData)}. {defendantsElement.TextContent}");
    
                            PlaintiffsTop.Text = "Истцы:";
    
                            foreach (IElement element in GetElementsBySelector(PlaintiffsSelector))
                            {
                                Plaintiffs.Text += element.TextContent.Trim() + "\n\n";
                                Debug.WriteLine($"{nameof(UpdateData)}. Истцы.");
                            }
                            
                            foreach (IElement element in GetElementsBySelector(DefendantsSelector))
                            {
                                Defendants.Text += element.TextContent.Trim() + "\n\n";
                                Debug.WriteLine($"{nameof(UpdateData)}. Ответчики.");
                            }
    
                            DefendantsTop.Text = "Ответчики:";
                        }
                        else
                        {
                            foreach (IElement element in GetElementsBySelector(PlaintiffsSelector))
                            {
                                Plaintiffs.Text += element.TextContent.Trim() + "\n\n";
                            }
    
                            PlaintiffsTop.Text = "Кредиторы (заявители):";
                            
                            foreach (IElement element in GetElementsBySelector(DefendantsSelector))
                            {
                                Defendants.Text += element.TextContent.Trim() + "\n\n";
                            }
    
                            DefendantsTop.Text = "Должники:";
                        }
                    }
                }
            }
    
            private void ClearTextInLabel()
            {
                Plaintiffs.Text = string.Empty;
                Defendants.Text = string.Empty;
            }
    
            private List<IElement> GetElementsBySelector(string selector)
            {
                IElement element = angle.QuerySelector(selector);
                var elements = new List<IElement>();
    
                int i = 1;
                while (element != null)
                {
                    elements.Add(element);
                    i++;
                    selector = selector.Replace((i - 1).ToString(), i.ToString());
                    element = angle.QuerySelector(selector);
                }
    
                return elements;
            }
        }
    }
  • Почему иногда текст 2 раза пишется, а не 1 раз?

    Дядя Богдан, позже отвечу. Я понял в чём проблема.

    Прям весь проект не смог. Интернет очень плохой.

    Весь и не нужно
  • Почему иногда текст 2 раза пишется, а не 1 раз?

    Дядя Богдан, вот как ты себе представляешь это? Я создаю пустой проект Windows Forms. Копирую в Form1.cs твой код. По пространствам имён догадываюсь, какие именно библиотеки у тебя подключены и подключаю их наугад. Ок. Далее, я вижу какие-то контролы на форме, я руками кидаю их на форму. Не имею понятия, что там чем является и как должно хотя бы примерно располагаться на форме, кидаю простые текстбоксы и меняю им названия (хорошо, что есть метод очистки, там я быстро нашёл почти все контролы).
    610b23ec07389797055417.png
    Далее я запускаю приложение и первое же условие не выполняется. Просто не происходит парсинг вообще. Сидеть над этим, тратить кучу времени, чтобы понять, что ты там парсил, точно ли я по правильному адресу перехожу как-то неохота. У меня своей работы хватает.

    Ты хотя бы скинул бы вот эту часть:
    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <UseWindowsForms>true</UseWindowsForms>
        <Platforms>AnyCPU;x64</Platforms>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="AngleSharp" Version="0.16.0" />
        <PackageReference Include="CefSharp.OffScreen" Version="91.1.230" />
        <PackageReference Include="CefSharp.WinForms" Version="91.1.230" />
      </ItemGroup>
    
    </Project>


    Всё, что тебе нужно сделать -- это создать рабочий проект (можно не свой оригинальный), который точно работает и он начнёт парситься хотя бы и воспроизведётся твоя проблема. Мне сайт не отдаёт результаты и я не знаю как на нём искать и даже разбираться не хочу, так как есть куда время потратить. От тебя требуется рабочий проект (раз это не простое консольное приложение), который запускаешь и он сразу парсит. Вот тогда можно искать проблему. То есть, нужно потратить время, чтобы тебе помогли. Предоставить максимум информации, ведь ты заинтересован в решении проблемы, а не кинул обрывок и вроде как разбирайтесь как хотите. Особенно забавно теперь выглядит первый обрывок кода. По нему нереально понять почему у тебя выводятся данные два раза.

    Сейчас я перешёл по ссылке Сайт (ты выкладывал выше) и у меня пустая белая страница.
  • Здравствуйте, можете ,пожалуйста, посоветовать где почитать хорошую документацию по c#(кроме сайта Microsoft)?

    Дмитрий, хотя бы уж, но точно не C# 4.0
    C# 7.0. Справочник. Полное описание языка | Албахари Бен, Албахари Джозеф
  • Почему иногда текст 2 раза пишется, а не 1 раз?

    Скинь или весь код или проект. Если проект большой, то новое консольное приложение, которое показывает только эту проблему. Я бы глянул. А так сидеть гадать неохота.
  • Нормально ли работает FixedUpdate?

    PsyDuckbest, видео посмотри, на которое я ссылку давал. Внимательно и от начала до самого конца всё полностью. Там всё объясняется про то, что откуда надо вызывать.