• Как прочитать данные из файла?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет!
    для чтения тебе нужно FileStreamвоспользоваться.
    Пример с документацией тут.
    Ответ написан
    Комментировать
  • Как вернуть коллекцию для IEnumerable метода расширения?

    ayazer
    @ayazer
    Sr. Software Engineer
    public static IEnumerable<int> ExtensionMethod(this IEnumerable<int> list, int percentline)
            {
                try
                {
                    if (list.Count() <= 100 && list.Count() >= 1)
                    {
                        IEnumerable<int> count = list.OrderByDescending(sort => sort).Take((int)(list.Count() * percentline / 100.0f));
                        Console.WriteLine("Перечень элементов: \n" + string.Join(", ", count));
                    }
                    else
                    {
                        throw new ArgumentException();
                    }
                }
                catch (ArgumentException)
                {
                    Console.Write("ОШИБКА!!!\n");
                }
                return list;
            }


    ну и соотв далее

    var list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
                list
                    .ExtensionMethod(10)
                    .ExtensionMethod(25);
    Ответ написан
    3 комментария
  • Как подсчитайте процент элементов в списке с LINQ?

    freeExec
    @freeExec
    Участник OpenStreetMap
    list.Take(list.Count() * 30 / 100)
    Думаю с проверкой на 100 и исключением сам сообразишь.
    Ответ написан
    Комментировать
  • Как связать ObservableCollection и INotifyCollectionChanged?

    @Ksarrik
    В вашем случае для отображения списка Employee достаточно привязать коллекцию ObservableCollection к элементу списка WPF. ObservableCollection уже реализовывает интерфейсы INotifyCollectionChanged и NotifyPropertyChanged, Поэтому никакой дополнительной увязки не требуетсяhttps://docs.microsoft.com/ru-ru/dotnet/api/system.collect...
    ObservableCollection можно использовать в чистом виде
    А вот если хотите чтобы при изменении свойств класса Employee в интерфейсе обновлялась информация тогда нужно в классе Employee реализовать интерфейс NotifyPropertyChanged.
    В вашем случае чтобы увязать ViewModel с WPF достаточно привязать коллекцию к спискам:
    <Window x:Class="WpfApp1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded" >
        <Grid>
            <ListBox x:Name="listbox1" DisplayMemberPath="Name">
                </ListBox>
        </Grid>
    </Window>


    public partial class MainWindow : Window
        {
            private MainViewModel viewModel = new MainViewModel();
    
    
            public MainWindow()
            {
                InitializeComponent();
                //добавляем сотрудников
                viewModel.Employees.Add(new Employee() {Name="Иванов Иван" });
                viewModel.Employees.Add(new Employee() { Name = "Петров Петр" });
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                //привязываем viewModel (необязательно для отображения списка)
                this.DataContext = viewModel;
    
                //привязываем коллекцию
                this.listbox1.ItemsSource = viewModel.Employees;
            }
        }


    61838d6849b9a243115942.png
    Класс Tree в случае реализации необходимых интерфейсов можно использовать вместо класса ObservableCollection.

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

    Adler_lug
    @Adler_lug
    Если правильно понял, то так.
    int counter = 2;
    if (counter == 0)
    {
     counter = 2;
     return ("", "", "Вы спрашиваете слишком часто.");
    }

    Хотя в вашем коде винегрет, т.к. при
    int counter = 2;
    if (counter == 0)

    if никогда не выполнится вообще...
    Ответ написан
    1 комментарий
  • Как поймать исключение в свойстве и вывести его?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вообще, кидать исключения в свойствах - такое себе.
    В вашем случае стоит сделать так:
    public string? Top => _elements.LastOrDefault(); // Обычный метод Last кидает исключение, если коллекция пустая

    Если бы так нельзя было бы сделать, пришлось бы завернуть всё в try-catch. Например так:
    string? top = null;
    try {
      top = s.Top;
    catch {}
    Console.WriteLine($"Количество элементов в стеке: <{s.Size}>, верхний элемент стека: <{(top == null ? "null" : top)}>");

    Кстати, чтобы дважды не вычислять s.Top в тернарнике - можно использовать сопоставление с образцом
    s.Top is {} t ? t : "null";

    Ещё вариант - оставить всё как есть, но иначе составлять сообщение:
    var msg = s switch {
      { Size: 0 } => $"Стек пуст",
      { Size: var size, Top: var top} => $"Количество элементов в стеке: <{size}>, верхний элемент стека: <{top}>"
    };
    Console.WriteLine(msg);
    Ответ написан
    1 комментарий
  • Как сделать несколько переменных по запросу?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Есть два способа:
    Через конструктор с params

    public class Test 
        {
            public Test(params string[] elements) {
                foreach(var element in elements)
                    AddElement(element);
            }   
            private List<string> _elements = new List<string>();
    
            public void AddElement(string x)
            {
                string AddElement = x;
                _elements.Add(AddElement);
                Console.WriteLine($"Элемент <{AddElement}> добавлен.");
                Console.WriteLine($"Стэк: {String.Join("; ", _elements)}");
                Console.WriteLine();
            }
    }


    var x = new Test("a", "b", "c");

    Через Collection Initializer

    public class Test 
        {
            private List<string> _elements = new List<string>();
            // Для Collection Initializer нужен публичный метод Add
            public void Add(string element) => AddElement(element); 
            public void AddElement(string x)
            {
                string AddElement = x;
                _elements.Add(AddElement);
                Console.WriteLine($"Элемент <{AddElement}> добавлен.");
                Console.WriteLine($"Стэк: {String.Join("; ", _elements)}");
                Console.WriteLine();
            }
    }


    var x = new Test { "a", "b", "c" };
    Ответ написан
    1 комментарий
  • Как обработать функцию и записать все ее ошибки и вывести итог?

    Griboks
    @Griboks Куратор тега C#
    static int GetInput(string paramName)
            {
                while (true) 
                {
                    Console.Write($"\nВведите значение <{paramName}>: ");
                    if (int.TryParse(Console.ReadLine(), out int xi) && xi % 2 == 0) return xi;
                    else 
                    {
                        Console.BackgroundColor = ConsoleColor.Red;
                        Console.ForegroundColor = ConsoleColor.Black;
                        Console.WriteLine("\n***********************************************************************");
                        Console.WriteLine("*Ошибка: Один из идентифицированных элементов имел недопустимый формат*");
                        Console.WriteLine("***********************************************************************");
                        Console.ResetColor();
                    } 
                }
            }
    Ответ написан
    6 комментариев
  • Как сделать проверку на ввод и нарисовать таблицу?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Комментировать
  • Как узнать количество элементов в массиве?

    twobomb
    @twobomb
    Console.WriteLine(getCount(moves,Figure.Queen));
    //....
            public int getCount(List<Coords>[][,] arr, Figure figure)
            {
                int count = 0;
                foreach (var c in arr[(int) figure])
                    count += c.Count;
                return count;
            }
    Ответ написан
    6 комментариев