Ответы пользователя по тегу .NET
  • Как склеить несколько подмассивов расположенных в одном массиве типа Object?

    FoggyFinder
    @FoggyFinder
    1. Вы не учитываете вложенность массивов: размер нового массива должен быть равен сумме длин всех входящих массивов. За первый пробег вы узнаете общий размер и проверяете что все типы совпадают, за второй пробег уже копируете.
    Тогда получится нечто вроде такого

    static Array Combine(params object[] arr)
    {
        if (arr.Length == 0)
        {
            return null;
        }
    
        var totalSize = 0;
        Type type = null;
        foreach (Array inner in arr)
        {
            var innerType = inner.GetType();
            type ??= innerType;
    
            if (innerType != type)
            {
                return null;
            }
    
            totalSize += inner.Length;
        }
    
        var resultArr = Array.CreateInstance(type.GetElementType(), totalSize);
        var currentSize = 0;
    
        foreach (Array inner in arr)
        {
            Array.Copy(inner, 0, resultArr, currentSize, inner.Length);
            currentSize += inner.Length;
        }
    
        return resultArr;
    }


    2. Отказаться от возвращения Array и перейти к дженерикам. Тогда можно использовать Linq в виде связки SelectMany + ToArray(), в SelectMany нужно будет привести к нужному типу.
    Ответ написан
    9 комментариев
  • Проблемы с NETStandard.Library в Xamarin?

    FoggyFinder
    @FoggyFinder
    В списке источников NuGet:

    Tools -> NuGet Package Manager -> Package Manager Settings -> Package Sources.

    должен находится стандартный:

    https://api.nuget.org/v3/index.json


    Если его там нет, то нужно будет добавить.
    Ответ написан
    Комментировать
  • NET Core. Как перенести с виндовс на mac os?

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

    dotnet publish

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

    dotnet publish -c Release --framework netcoreapp2.0 --runtime osx-x64
    Ответ написан
  • Как получить значение с foreach и передать его методу?

    FoggyFinder
    @FoggyFinder
    public List<string> GetPhotoUrl() => 
                Api.Wall
                   .Get(new WallGetParams { Domain = "lol.community", Count = 2 })
                   .WallPosts
                   .Select(item => (item.Attachments[0].Instance as Photo).Sizes[0].Url.AbsoluteUri.ToString())
                   .ToList();
    Ответ написан
    Комментировать
  • В какие языки транслируется F#?

    FoggyFinder
    @FoggyFinder
    Как уже написали выше, вопрос только в затратах на написание. Поэтому прежде всего хотелось бы узнать причины возникновения такого вопроса.

    Если вас интересует список OS проектов, то кроме вышеупомянутого Fable (который очень популярен), есть еще FEZ

    FEZ - an F# to core erlang experiment

    Но учтите, что проект экспериментальный.

    Fjord это еще один экспериментальный проект, который давно не обновлялся:

    Fjord, F# programming language for the JVM.

    Также отмечу активно разрабатываемый CoreRT:

    > The CoreRT compiler can compile a managed .NET Core application into a native (architecture specific) single-file executable that is easy to deploy.

    Что касается поддержки F#, то советую обратить внимание на этот ишшуй:

    F# Status on CoreRT and UWP #6055
    Ответ написан
    Комментировать
  • Как визуально разделить форму (окно) на части(блоки) в WindowsForms?

    FoggyFinder
    @FoggyFinder
    Используйте Layout-s, в вашем случае должен подойти TableLayoutPanel, который позволяет компоновать элементы управления в виде таблицы.

    Простой пример на русском языке можно найти тут:

    TableLayoutPanel
    Ответ написан
    Комментировать
  • Как создать свой дизайн интерфейса в WPF?

    FoggyFinder
    @FoggyFinder
    1. "Напрямую накидывать" вероятно, нельзя. Но возможность импорта все-таки присутствует:

    How to Import Photoshop Files into WPF

    Насколько такой способ рабочий сейчас - не знаю, не проверял.

    2. Blend for Visual Studio overview

    3. Metro UI особый стиль для приложений / сайтов. Для WPF есть очень известная библиотека MahApps.Metro.

    Теперь, что касается "стилизации" - WPF в плане настройки внешнего вида элементов управления и приложений в целом очень гибкий. Можно сделать практически все. Не буду даже пытаться раскрывать тему, материалов в сети очень много, но попробую дать направление для дальнейших поисков:

    Ключевые слова:

    • Style
    • DataTemplate
    • Trigger


    Для ознакомления материал из документации:

    Styling and Templating

    А для основательного разбора рекомендую следующую литературу:

    1. WPF: Windows Presentation Foundation в .NET 4.5 с ...

    2. WPF 4. Подробное руководство


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

    Есть и онлайн ресурсы:

    1. metanit: Руководство по WPF
    2. professorweb: WPF - Windows Presentation Foundation


    Некоторые библиотеки, которые упрощают жизнь разработчику, предлагая стилизацию стандартных элементов а также дополняя часто используемыми контролами. Даже если вы не будете использовать ни один из приведенных в списке ниже вариантов, из исходников вы можете извлечь много полезной информации, так что даю ссылки на них, а не на страницы документации:



    Первые две очень широко используются.

    И напоследок небольшое отступление:

    Больше практики, а если в чем-то не уверены - спрашивайте, здесь, на тостере или где-нибудь еще, не так важно.

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

    В принципе, можете попробовать совместить F# c WPF, возможности code-behind нам намного-намного меньше ;-), а значит проще будет пойти понять шаблоны MVVM или даже Elmish.
    Ответ написан
    Комментировать
  • Почему не добавляет элемент в список?

    FoggyFinder
    @FoggyFinder
    Как уже правильно указали, проблема состоит в том, что вы каждый раз создаете новый экземпляр ManagerMeeting:

    public void Route(string answer)
    {
        var manager = new ManagerMeeting();


    Также оставлю несколько комментариев по поводу кода:

    1. Наследование применяете неправильно.

    2. Если в сеттерах свойств нет дополнительной проверки на корректность значений полей, то лучше использовать авто-свойства.

    3. Слишком сложная структура - классы Menu, Route кажутся избыточными. Для таких простых сценариев методы перечисленных классов проще перенести в Program.

    4. Класс ManagerMeeting слишком сильно связан с консолью, кроме того есть зависимость от Menu. Если хотите предоставить методы для управления коллекцией (список встреч), то выставите необходимые методы и уже работайте с ними.

    5. Для форматированного вывода собственных классов удобно переопределить метод .ToString()

    Немного переписанные классы с учетом указанного выше:

    class Meetings // Класс встреч
        {
            public string DateMeeting { get; set; }
            public string StartMeeting { get; set; }
            public string EndMeeting { get; set; }
    
            public override string ToString()
            {
                return $"Дата встречи: {DateMeeting}, Начало встречи: {StartMeeting}, Конец встречи: {EndMeeting}";
            }
        }
    
        class ManagerMeeting //  Класс управление встречами
        {
            public List<Meetings> MeetingList { get; } = new List<Meetings>();
            public void Add(Meetings meet)
            {
                MeetingList.Add(meet);
            }
            public string FormatMeetings()
            {
                StringWriter sw = new StringWriter();
                foreach (var meet in MeetingList)
                    sw.WriteLine(meet);
                return sw.ToString();
            }  
        }


    меню:

    class Program
        {
            static ManagerMeeting manager = new ManagerMeeting();
            public static void ShowMainMenu()
            {
                Console.WriteLine("Выберите действие: \n1. Показать все встречи\n2. Создать новую встречу");
            }
    
            public static bool Handler()
            {
                Console.Clear();
                ShowMainMenu();
                string answer = Console.ReadLine();
                switch (answer)
                {
                    case "1":
                        var result = manager.FormatMeetings();
                        if (string.IsNullOrWhiteSpace(result))
                            Console.WriteLine("Список пуск");
                        else
                            Console.WriteLine(manager.FormatMeetings());
                        return true;
                    case "2":
                        manager.Add(ReadMeeting());
                        return true;
                    default:
                        return false;
                }
            }
    
            public static void Main(string[] args)
            {
                while (Handler()) Console.ReadKey(true);
                Console.ReadKey(true);
            }
    
            public static Meetings ReadMeeting()
            {
                Console.WriteLine("Введите дату встречи:");
                var date = Console.ReadLine();
                Console.WriteLine("Введите время начала встречи:");
                var startMeeting = Console.ReadLine();
                Console.WriteLine("Введите время конца встречи:");
                var endMeeting = Console.ReadLine();
    
                Console.WriteLine("Встреча добавлена! \n ");
                //Для проверки, записываются ли поля - записываются
                Console.WriteLine(date + startMeeting + endMeeting);
                return new Meetings
                {
                    DateMeeting = date,
                    StartMeeting = startMeeting,
                    EndMeeting = endMeeting
                };
            }
        }


    Конечно, код выше тоже далек от идеального (всегда есть что улучшать). Например,:

    Предусмотрите проверку данных:

    В считывания информации с консоли:
    * используйте типы данных которые лучше всего подходят для описания свойств (DateTime для даты и времени вместо универсального string)
    * напишите вспомогательные методы GetInteger, GetDateTime и другие которые будут возвращать результат только после того как пользователь ввел корректные данные.

    В классе ManagerMeeting:

    * Пусть вместо void метод Add -возвращает bool в зависимости от успешности добавления (например, чтобы предусмотреть сценарии добавления давно прошедшей встречей).

    И так далее.
    Ответ написан
    2 комментария
  • Можно ли на WPF создавать самостоятельные приложения для частного использования?

    FoggyFinder
    @FoggyFinder
    Поняла, да не до конца. Что еще нужно, чтобы сделать цельное приложение


    Все зависит от самого приложения.

    Назовите плиз примеры из жизни для приложений, которые можно написать используя это фреймворк.


    Их очень много. Приведу несколько OpenSource приложений которые использую или использовал раньше:

    Snoop
    ScreenToGif
    MarkdownMonster
    LiteDbExplorer

    Эти приложения могут индивидуально писаться под заказ как сайты к примеру


    Могут и пишутся.
    Ответ написан
    Комментировать