XTZ : tz1NamrcVY1phmr3kjxG2GFaT3t6sr2ru7ik

TRX : TFyYof4kEtsQTSKHUABRuPfKmANgTnWcHS

LTC : Li2JayLeRe33w5W2n4RcHXAAFzf1nizb4V
Контакты

Достижения

Все достижения (6)

Наибольший вклад в теги

Все теги (29)

Лучшие ответы пользователя

Все ответы (85)
  • Как упростить переменную в C#?

    FoggyFinder
    @FoggyFinder
    Можно вынести в отдельную функцию:

    string CreateASCIIStr(string value) => Encoding.ASCII.GetString(Convert.FromBase64String(value));


    или, в локальную, с использованием LocalData:

    string CreateASCIIStr(string value) =>
                    LocalData + Encoding.ASCII.GetString(Convert.FromBase64String(value));


    Добавлено:

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

    В данном случае у вас есть многократный последовательный вызов двух методов:

    Convert.FromBase64String и Encoding.ASCII.GetString

    для удобства их совмещаем в один вызов и получаем

    Encoding.ASCII.GetString(Convert.FromBase64String(value))

    Пример:

    string LocalData = "0";
    string CreateASCIIStr(string value) =>
        LocalData + Encoding.ASCII.GetString(Convert.FromBase64String(value));
    
    var data = new[] {
        CreateASCIIStr("Тут"),
        CreateASCIIStr("Все"),
        CreateASCIIStr("значения"),
        CreateASCIIStr("будут"),
        CreateASCIIStr("совершенные"),
        CreateASCIIStr("Разные")
    };


    Здесь возвращается массив, но если ваши совершенно разные значения в действительности являются массивом, то и обрабатывать их лучше как массив ;-)
    Ответ написан
    3 комментария
  • Какой язык выбрать (F# или Lisp)?

    FoggyFinder
    @FoggyFinder
    Смело выбирайте F#. Коротко о преимуществах:

    1. Это не экзотика (да, его реально используют).

    2. Дружелюбное сообщество, в том числе русскоязычное:

    3. F# язык из семейства dotnet. Эта платформа, несмотря на свою популярность, открывает новые горизонты с плавным переходом к .NET Core.

    4. F# оптимальный выбор для тех кто только начинает свой путь по дороге функциональной парадигмой. Одной из причин является то, что F# не чисто функциональный, а в первую очередь функциональный. Таким образом освоив базовые возможности F# вам будет значительно легче понять код на Haskell или Erlang.

    Теперь к недостаткам:

    1. Познакомившись с F# вам, вероятно, больше не захочется использовать ничего другого. Да, он настолько хорош.

    2. Далеко не все F# конструкции оперативно поддерживаются. Вы можете столкнутся с необходимостью писать не идиоматичный F# код при работе с UWP или Xamarin.Forms.
    Ответ написан
    Комментировать
  • Как переделать код (см. внутри)?

    FoggyFinder
    @FoggyFinder
    Давайте попробуем вместе разобраться как решать подобные вопросы.

    В таких случаях первое что нужно сделать это правильно докопаться до корня проблемы.

    Ваша задача убрать использование пространства имен System.Drawing.

    Что для этого нужно сделать?
    1. Убрать вверху заголовочный using
    using System.Drawing;
    2. Удалить ссылку на сборку

    Теперь пробуем скомпилировать проект, получаем ошибки:

    error CS0246: Не удалось найти тип или имя пространства имен "Point" (возможно, отсутствует директива using или ссылка на сборку)


    Значит вопрос можно переформулировать примерно следующим образом:

    Чем можно заменить класс Point из System.Drawing?


    Согласитесь, что чем более конкретен вопрос тем легче на него ответить.

    Итак, всего одна ошибка значит большого труда исправление не составит. Не хватает одного класса Point. Можно пойти посмотреть исходники и скопировать класс оттуда, но мы пойдем другим путем.

    Компилятор пишет что нужен класс? Окей, давайте создадим класс

    class Point
    {
    
    }


    Пробуем собрать, ошибок стало еще больше. Но пугаться не нужно, внимательно читаем сообщения и строки которые вызывают ошибки

    if (field[i, j] == "0") current = new Point(i, j);

    1>error CS1061: "Point" не содержит определения "X", и не удалось найти доступный метод расширения "X", принимающий тип "Point" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).


    if ((i == current.X) && (j == current.Y))


    1>error CS1061: "Point" не содержит определения "Y", и не удалось найти доступный метод расширения "Y", принимающий тип "Point" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
    1>error CS1061: "Point" не содержит определения "Y", и не удалось найти доступный метод расширения "Y", принимающий тип "Point" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).


    Кажется, все понятно. Мы пытаемся использовать несуществующий конструктор и несуществующие свойства.

    Добавляем все необходимое. Компилятор ругается на два свойства и ожидает увидеть конструктор с двумя параметрами? Ага, зависимость видна - каждому параметру соответствует свое свойство с названиями X и Y соответственно.

    Как определить их тип? Смотрим что мы пытаемся туда передать? i , j - целые числа - int. Значит его и ставим.

    class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
    
        public Point(int x, int y)
        {
            X = x;
            Y = y;
        }
    }


    Пробуем скомпилировать? Ошибок нет, можно переходить к этапу проверки работоспособности.
    Ответ написан
    2 комментария
  • Как импортировать таблицу Excel в C#?

    FoggyFinder
    @FoggyFinder
    Существует множество библиотек для работы с Excel. Что из них выбрать зависит от задачи (например, нужно только читать данные или нужно формировать полноценный отчет, со стилями и так далее).

    Судя по описанию, здесь вам нужно только чтение, причем с поддержкой устаревшего формата xls, поэтому рекомендую библиотеку ExcelDataReader

    Если у вас .Net Core приложение не забудьте добавить строку

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);


    А теперь пример.

    1. В C# не принято для классов использовать публичные поля, поэтому перепишем их на свойства

    public class Questions
    {
        public string Question { get; set; }
        public string Theme { get; set; }
        public string Description { get; set; }
        public string QuestionEn { get; set; }
        public string DescrEn { get; set; }
    }


    2. Само чтение

    const string FilePath = "sample.xls";
    var qs = new List<Questions>();
    
    using var stream = File.Open(FilePath, FileMode.Open, FileAccess.Read);
    using var reader = ExcelReaderFactory.CreateReader(stream);
    do
    {
        while (reader.Read())
        {
            var question = reader.GetString(0);
            var theme = reader.GetString(1);
            var description = reader.GetString(2);
    
            qs.Add(new Questions()
            {
                Question = question,
                Theme = theme,
                Description = description
            });
        }
    } while (reader.NextResult());


    3. Выводим результат

    foreach(var q in qs)
    {
        Console.WriteLine($"{q.Question}");
        Console.WriteLine($"{q.Theme}");
        Console.WriteLine($"{q.Description}");
        Console.WriteLine(new string('-', Console.WindowWidth));
    }


    4. Запускаем, проверяем

    Индейцы в знак примирения хлопали в ладоши
    history
    Они закапывали топор войны
    ----------------------------------------------------------------------------------------------------
    Моряки пропитывали свою одежду смолой, чтобы она не рвалась
    history
    Чтобы она не пропускала воду
    ----------------------------------------------------------------------------------------------------
    Ответ написан
    1 комментарий
  • NET Core. Как перенести с виндовс на mac os?

    FoggyFinder
    @FoggyFinder
    Собрать приложение под другую платформу можно с помощью команды publish

    dotnet publish

    с указанием правильного runtime. Например:

    dotnet publish -c Release --framework netcoreapp2.0 --runtime osx-x64
    Ответ написан