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

    @cicatrix
    было бы большой ошибкой думать
    gtgt, Код компилируется? Нет? Что пишет компилятор? Он ваш лучший друг, всегда внимательно читайте все его сообщения.
    Правый клик на function, go to definition. Среда перескочит на определение function. Поймёте, что это.
    Ответ написан
    Комментировать
  • Как удалить обработчик событий в Windows Forms?

    @cicatrix
    было бы большой ошибкой думать
    Назначение обработчиков событий в WF по умолчанию средой делается в методе InitializeComponent() - в конструкторе формы помещён его вызов. Из него убрать надо, а само тело метода просто удалить.
    Ответ написан
    Комментировать
  • Почему неправильно отображается текст в C# WF?

    @cicatrix
    было бы большой ошибкой думать
    сам файл я поменял кодировку на UTF-8

    Похоже, что нет. Или используемый на форме шрифт не поддерживает кириллицу.
    Ответ написан
  • Как отсортировать односвязный список?

    @cicatrix
    было бы большой ошибкой думать
    Для сведения, в C# уже есть готовая реализация связного списка:
    https://docs.microsoft.com/en-us/dotnet/api/system...
    Но я так понимаю, это для процесса обучения, где надо изобрести собственный велосипед.
    В твоём примере алгоритм пузырька - самый медленный из всех возможных алгоритмов сортировки.
    В его основе операция замены двух элементов:
    int temp = intArray[i];
    intArray[i] = intArray[minID];
    intArray[minID] = temp;

    Ну можешь этот же самый пузырёк реализовать и у себя в классе. Проходи так же по своему списку, находи минимальный, запоминай, потом меняй текущий на минимальный.
    Код пиши сам - ты же учишься.
    Ответ написан
    2 комментария
  • Почему код выдает ошибку http 451?

    @cicatrix
    было бы большой ошибкой думать
    https://ru.wikipedia.org/wiki/HTTP_451
    Ошибка 451 или «Недоступно по юридическим причинам» (англ. Unavailable For Legal Reasons) — стандартный код ответа HTTP, означающий, что доступ к ресурсу закрыт, например, по требованию органов государственной власти или правообладателя в случае нарушения авторских прав. Был одобрен IESG 21 декабря 2015 года[1] и опубликован как RFC 7725 в феврале 2016 года. Код ошибки является отсылкой к роману Рэя Брэдбери «451 градус по Фаренгейту»[2]. Можно сказать, что код HTTP 451 — это уточняющая версия кода HTTP 403[3].
    Ответ написан
  • Как можно передать в качестве параметра данный аргумент?

    @cicatrix
    было бы большой ошибкой думать
    1. MIME типы никогда не вводятся вручную при запросе, они не для этого
    2. Константы вполне определяются, вот пример для распространённых MIME типов
    https://gist.github.com/markwhitaker/b29c014236071...
    3. Если вам надо получить MIME тип в контроллер, то, скорее всего, вы что-то делаете не так.
    Ответ написан
    Комментировать
  • Вылезает ошибка Object reference not set to an instance of an object?

    @cicatrix
    было бы большой ошибкой думать
    var stream = GetStreamFromFile("Faded.mp3");
    playy = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
    playy.Load(stream); // ОШИБКА ВЫЛЕЗАЕТ ТУТ

    2 варианта - либо GetStreamFromFile не загрузил файл и вернул null
    либо CreateSimpleAudioPlayer никакого плеера не создал и тоже вернул null
    Проверь, stream != null и playy != null
    Ответ написан
    5 комментариев
  • Ошибка: «Отсутствует аргумент, соответствующий требуемому формальному параметру», в чем причина?

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

    Вот простенький пример (реализация функций может быть и в отдельных методах):
    delegate double mathfunc(double arg);
    static void Main()
    {
            mathfunc sin = arg => Math.Sin(arg);  // реализация синуса
            mathfunc cos = arg => Math.Cos(arg);  // реализация косинуса
            var result_sin = DoMath(sin, Math.PI / 2);  // передача адреса на реализацию синуса методу DoMath
            var result_cos = DoMath(cos, Math.PI / 2);
    }
    
    // Метод, который выполняет вызов функции через делегат
    static double DoMath(mathfunc function, double argument) 
    {
        return function(argument);
    }
    Ответ написан
    Комментировать
  • В чем плюсы и минусы способов? Что лучше использовать?

    @cicatrix
    было бы большой ошибкой думать
    [^1] - синтаксический сахар.
    Если посмотреть, как этот код выглядит в IL, окажется, что выполняется один и тот же код.
    Кто сомневается, вот:
    Трансляция в IL
    Для понимания и последующей поддержки лучше пользоваться array[Length-1]. Это более наглядно и понятно, может быть, через несколько лет синтаксис [^1] и станет более узнаваем и распространён, но пока что это не так.
    Ответ написан
    Комментировать
  • Как задать разные действия при нажатия на одну и ту же кнопку?

    @cicatrix
    было бы большой ошибкой думать
    КнопкаНажата()
    1) запусти таймер на n миллисекунд
    2) выполни прыжок

    КнопкаОтжата()
    останови таймер

    ИстеклоВремяТаймера()
    1) останови таймер
    2) выполни длинный прыжок
    Ответ написан
    2 комментария
  • Как сделать рандомные числа без повторений?

    @cicatrix
    было бы большой ошибкой думать
    Возможность повторов заложена в самой природе случайности. Ты ведь можешь монетку подбросить двумя решками кверху подряд.
    Придётся ручками проверять, было ли уже такое значение или нет.
    Вообще, лучше сделай так:
    1. Сгенери набор чисел A[0...N], из которых надо будет вытянуть случайным образом значения
    2. Получи случайное число R, такое чтобы 0 <= R <= A[N-1]
    3. Получи элемент набора A[R] и выброси этот элемент из него. В наборе останется N-1 элементов
    4. GOTO 2 пока набор не пустой
    Как с набором карт, из которой ты по одной тянешь карты. То есть, случайно ты определяешь не само число, а порядковый номер числа в некоем наборе.
    Ответ написан
  • Как правильно создать скриншот неактивного окна?

    @cicatrix
    было бы большой ошибкой думать
    Когда Direct3d переходит в полноэкранный режим, оно получает эксклюзивный прямой доступ к видеокарте (то есть, минуя ОС), поэтому стандартные средства операционной системы для получения скриншотов не подойдут. ОС понятия не имеет, что там внутри окна нарисовано. Для получения скриншота необходимо зацепляться за рендерер.

    Taking the screenshot itself is relatively straightforward. Once the scene has been rendered, the Direct3D device offers a GetRenderTarget function that returns a pointer to a Direct3D surface with the current scene. Using a SurfaceToBitmap function, the RenderTarget can be converted to a Bitmap object, which can then be saved as either a JPEG or PNG to disk. Below is an example of the code involved:

    Bitmap screenshot = Funcs.SurfaceToBitmap(device.GetRenderTarget(0));
    screenshot.Save(Frame.ToString() + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    screenshot.Dispose();


    https://www.apharmony.com/software-sagacity/2014/0...
    Ответ написан
  • Проблема дизайна или как решить циклическую зависимость?

    @cicatrix
    было бы большой ошибкой думать
    С точки зрения реляционной модели данных, подразделение не должно содержать ссылок на пользователей, достаточно ссылки пользователя на подразделение. Тут ещё надо иметь в виду транзакционные издержки при переводе пользователей из одного подразделения в другое - это обновление двух связей и потенциальный риск рассогласования.
    Ответ написан
    Комментировать
  • Как вывести исключения для опеределенного исключения?

    @cicatrix
    было бы большой ошибкой думать
    Где-то всё равно выбор придётся делать.
    1) Можно сделать своё исключение, наследуемое от System.Exception и заворачивать внутрь исключение, которое выбросилось
    2) Сообщение об ошибке можно передавать в теле исключения (message)

    try
        {  
           /// 
        }
        catch(InvalidOperationException ex)
        {
            throw new MyCustomException("Случилось страшное", ex);
        }
        catch(DataException ex)
        {
            throw new MyCustomException("Не менее страшное", ex);
        }
        catch (Exception ex)
        {
            throw new MyCustomException("Тут вообще хз что произошло", ex);
        }

    При этом, первоначальное исключение будет в свойстве InnerException
    Ответ написан
    Комментировать
  • Аналог DotVVM для asp.net web forms?

    @cicatrix
    было бы большой ошибкой думать
    А хостинг не проще сменить? Ну или показать им на календарь, в графу "год"?
    Ответ написан
    Комментировать
  • Как прикрутить многопоточную обработку без проблем с памятью?

    @cicatrix
    было бы большой ошибкой думать
    Не создавай много потоков.
    Если хочешь заморочиться, то можно отслеживать состояние памяти процесса и регулировать их количество. Если не заморачиваться, то прирост производительности от параллельного исполнения ограничен количеством ядер процессора.
    То, что ты описал, подходит под паттерн - производитель-потребитель.
    Пример реализации
    Ответ написан
    Комментировать
  • Как генерировать/перебирать строку в пределах диапазона?

    @cicatrix
    было бы большой ошибкой думать
    А алфавит-то какой? 0-9A-Z, 0-9A-z, 0-9A-F или ещё какой?
    Может 4-й разряд принимать буквенные значения? Для каждого разряда разные алфавиты?

    class ComplexValue
        {
            const string m_Alphabet = "abcdefghijklmnopqrstuvwxyz";
            int First { get; set; }
            char[] Middle { get; set; };
            int Last { get; set; }
            public ComplexValue(string input)
            {
                First = int.Parse(input.Substring(0, 1));
                Middle = input.Substring(1, 3).ToCharArray();
                Last = int.Parse(input.Substring(input.Length - 1, 1));
            }
    
            public string Value() => $"{First}{new string(Middle)}{Last}";
    
            private int IncrementLast()
            {
                Last++;
                if (Last > 9) { Last = 0; return 1; }
                return 0;
            }
    
            private int DecrementLast()
            {
                Last--;
                if (Last < 0) { Last = 9; return 1 }
                return 0;
            }
    
            private char IncrementChar(char c, out bool carry)
            {
                carry = false;
                c++;
                if (c > m_Alphabet[m_Alphabet.Length -1] )
                {
                    c = m_Alphabet[0];
                    carry = true;
                }
                return c;
            }
    
            private char DecrementChar(char c, out bool borrow)
            {
                borrow = false;
                c--;
                if (c < m_Alphabet[0])
                {
                    c = m_Alphabet[m_Alphabet.Length - 1];
                    borrow = true;
                }
                return c;
            }
            
            private int IncrementMiddle()
            {
                int pos = Middle.Length - 1;
                while (pos > 0)
                {
                    Middle[pos] = IncrementChar(Middle[pos], out bool carry);
                    if (!carry) return 0;
                    pos--;
                }
                return 1;
            }
    
            private int DecrementMiddle()
            {
                int pos = Middle.Length - 1;
                while (pos > 0)
                {
                    Middle[pos] = DecrementChar(Middle[pos], out bool borrow);
                    if (!borrow) return 0;
                    pos--;
                }
                return 1;
            }
    
            public void Increment()
            {
                if (IncrementLast() > 0)
                {
                    if (IncrementMiddle() > 0) First++;
                }
            }
    
            public void Decrement()
            {
                if (DecrementLast() > 0)
                {
                    if (DecrementMiddle() > 0) First--;
                }
            }
        }
    Ответ написан
  • Как сохранить значения переменных после перезапуска в C#?

    @cicatrix
    было бы большой ошибкой думать
    Ответ написан
    Комментировать
  • Как реализовать движение рисунка С#?

    @cicatrix
    было бы большой ошибкой думать
    А что именно не работает-то?
    Методы исполняются синхронно, и пока весь цикл не закончится, картинка отображаться не будет... вернее, может и будет, но по желанию операционной системы.
    В тело цикла добавь Application.DoEvents(). В целом, криво, но для лабы сойдёт. Особенно, для такой, где анимацию в Windows Forms заставляют делать.
    Ответ написан
    Комментировать
  • Как извлечь подтег из главного тега?

    @cicatrix
    было бы большой ошибкой думать
    Комментировать