Задать вопрос
Ответы пользователя по тегу C#
  • Как на C# Получить список ip из диапазона ?

    StrangeAttractor
    @StrangeAttractor
    Попробуй так:

    private static List<IPAddress> IPAddressesRange(IPAddress firstIPAddress, IPAddress lastIPAddress)
    {
        var firstIPAddressAsBytesArray = firstIPAddress.GetAddressBytes();
    
        var lastIPAddressAsBytesArray = lastIPAddress.GetAddressBytes();
    
        Array.Reverse(firstIPAddressAsBytesArray);
    
        Array.Reverse(lastIPAddressAsBytesArray);
    
        var firstIPAddressAsInt = BitConverter.ToInt32(firstIPAddressAsBytesArray, 0);
    
        var lastIPAddressAsInt = BitConverter.ToInt32(lastIPAddressAsBytesArray, 0);
    
        var ipAddressesInTheRange = new List<IPAddress>();
    
        for (var i = firstIPAddressAsInt; i <= lastIPAddressAsInt; i++)
        {
            var bytes = BitConverter.GetBytes(i);
    
            var newIp = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
    
            ipAddressesInTheRange.Add(newIp);
        }
    
        return ipAddressesInTheRange;
    }


    Преобразовать текстовую строку в IPAddress (чтобы подать на вход вышеприведённой функции) можно так:

    var ipAddres = System.Net.IPAddress.Parse(ipString);


    (подразумевается, что переменная ipString имеет тип string и содержит IP адрес в текстовой нотации).

    Пример использования (при нажатии на кнопку button1 считаем диапазон от 192.168.0.1 до 192.168.0.10 и выкладываем в заголовок формы второй адрес из полученного диапазона):

    private void button1_Click(object sender, EventArgs e)
    {
        var first = "192.168.0.1";
    
        var last = "192.168.0.10";
    
        var range = IPAddressesRange(IPAddress.Parse(first), IPAddress.Parse(last));
    
        Text = range[1].ToString();
    }


    Консольные проги на C# никогда не писал (как-то так исторически сложилось, под консоль писал на других языках) так что вопрос ввода данных предлагаю отладить Вам самому, а что делать далее когда Вы получили первый и последний IP в строковом формате надеюсь понятно их последнего примера (если нет - дайте знать).

    UPDATE: Т.к. вопрошающему, судя по комментам, не помогло, добавляю полный код рабочей WinForms-программы:

    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Windows.Forms;
    
    namespace IpRange
    {
        public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }
    
            private void goButton_Click(object sender, EventArgs e)
            {
                IPAddress firstIpAddress;
    
                IPAddress lastIpAddress;
    
                if (String.IsNullOrWhiteSpace(firstIpAddressTextBox.Text))
                {
                    MessageBox.Show("Не задан начальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                if (String.IsNullOrWhiteSpace(lastIpAddressTextBox.Text))
                {
                    MessageBox.Show("Не задан начальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                try
                {
                    firstIpAddress = IPAddress.Parse(firstIpAddressTextBox.Text);
                }
                catch (FormatException)
                {
                    MessageBox.Show("Неправильно задан финальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                try
                {
                    lastIpAddress = IPAddress.Parse(lastIpAddressTextBox.Text);
                }
                catch (FormatException)
                {
                    MessageBox.Show("Неправильно задан финальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                var range = IPAddressesRange(firstIpAddress, lastIpAddress);
    
                wholeRangeListBox.Items.Clear();
    
                wholeRangeListBox.Items.AddRange(range.ToArray());
    
                // Или так (*вместо* предыдущей строчки - ту убрать, эту разкомментировать):
                // foreach (var ipAddress in range) wholeRangeListBox.Items.Add(ipAddress);
            }
    
            private static List<IPAddress> IPAddressesRange(IPAddress firstIPAddress, IPAddress lastIPAddress)
            {
                var firstIPAddressAsBytesArray = firstIPAddress.GetAddressBytes();
    
                var lastIPAddressAsBytesArray = lastIPAddress.GetAddressBytes();
    
                Array.Reverse(firstIPAddressAsBytesArray);
    
                Array.Reverse(lastIPAddressAsBytesArray);
    
                var firstIPAddressAsInt = BitConverter.ToInt32(firstIPAddressAsBytesArray, 0);
    
                var lastIPAddressAsInt = BitConverter.ToInt32(lastIPAddressAsBytesArray, 0);
    
                var ipAddressesInTheRange = new List<IPAddress>();
    
                for (var i = firstIPAddressAsInt; i <= lastIPAddressAsInt; i++)
                {
                    var bytes = BitConverter.GetBytes(i);
    
                    var newIp = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
    
                    ipAddressesInTheRange.Add(newIp);
                }
    
                return ipAddressesInTheRange;
            }
        }
    }


    Обратите внимание, что програма "окультурена", что выражается не только в проверке входных значений на пустоту и обработке неожиданного ввода исключениями, но и использованием информативных имён для элементов: главную форму я по обыкновению переименовываю из Form1 в MainForm, кнопка переименована из button1 в goButton, текстовые поля для ввода - firstIpAddressTextBox и lastIpAddressTextBox, список для вывода - wholeRangeListBox - надеюсь это не доставит дополнительных трудностей с использованием этого кода.
    Ответ написан
    6 комментариев
  • C# and sql server для опытных программистов?

    StrangeAttractor
    @StrangeAttractor
    Troelsen. Чисто простой прикладной подход, показывает что где как к чему для тех, кто уже писал на чём-то подобном, но не знаком или слабо знаком с .Net.
    Ответ написан
    Комментировать
  • C# WinForm как очистить все TextBox-ы на форме ?

    StrangeAttractor
    @StrangeAttractor
    Надо заходить внутрь же. Вот простейший вариант модификации вашего кода:

    foreach (Control c in Controls)
    {
        if (c.GetType() == typeof (GroupBox))
            foreach (Control d in c.Controls)
                if (d.GetType() == typeof(TextBox))
                    d.Text = string.Empty;
    
        if (c.GetType() == typeof(TextBox))
            c.Text = string.Empty;
    }


    А вот как (примерно, на самом деле я бы сделал extension method) бы сделал я:

    private static void CleanAllTextBoxesIn(Control parent)
    {
        foreach (Control c in parent.Controls)
        {
            if (c.GetType() == typeof(TextBox))
                c.Text = string.Empty;
    
            if (c.GetType() == typeof (GroupBox))
                CleanAllTextBoxesIn(c);
        }
    }
    
    private void CleanAllTextBoxesButton_Click(object sender, EventArgs e)
    {
        CleanAllTextBoxesIn(this);
    }
    Ответ написан
    2 комментария
  • Quick sort работает в c# почему-то быстрее, чем в с++. Разве не должно быть наоборот?

    StrangeAttractor
    @StrangeAttractor
    Не должно. Доподлинно известно, что есть вещи, которые работают на Java быстрее, чем на C++ или C (особенно если запрограммированы "втупую", без хитроумных ручных оптимизаций и хаков на основе учёта никоуровневых особенностей машины), а на Scala - ещё быстрее. C# данном контексте, можно сказать, та же Java/Scala. Я даже не удивлюсь, если найдутся задачи, в производительности которых будет лидировать, к примеру, PHP.
    Ответ написан
    1 комментарий
  • Какие есть альтернативы компонетнтам MindFusion для встраивания интерактивных блок-схем в дэсктопные C# приложения?

    StrangeAttractor
    @StrangeAttractor Автор вопроса
    Таки сделал сам (ну почти): flowgraph.codeplex.com
    Если кто захочет тоже использовать - с удовольствием отвечу на вопросы, багрепорты и пожелания таже приветствуются.
    Ответ написан
    Комментировать