+ Ответить в теме
Показано с 1 по 5 из 5

Тема: Ваши tips&tricks

  1. #1
    Наш Чел Dron247 кто это? Аватар для Dron247
    Регистрация
    18.07.2007
    Адрес
    Братск
    Возраст
    35
    Сообщений
    298
    Поблагодарил(а)
    29
    Получено благодарностей: 37 (сообщений: 32).

    По умолчанию Ваши tips&tricks

    Предлагаю постить ваши решения по поводу упрощения жизни в деле программирования. Язык любой, лишь бы он был признан как ЯП.
    Формат копируйте:
    ______________________________________________
    C# полезные экстеншн методы



    Цикл с известным числом повторений (найдено вконтакте)




    Сокращенный вызов String.Format




    Добавление элемента в коллекцию с проверкой его уникальности для коллекции (List<T>)

  2. 1 пользователь сказал cпасибо Dron247 за это полезное сообщение:

    SH! (24.09.2010)

  3. #2
    Наш Чел Dron247 кто это? Аватар для Dron247
    Регистрация
    18.07.2007
    Адрес
    Братск
    Возраст
    35
    Сообщений
    298
    Поблагодарил(а)
    29
    Получено благодарностей: 37 (сообщений: 32).

    По умолчанию C# 3.0 и выше. Продолжаем мучить расширения

    Иногда возникает задача потроллить училку по C# в универе или (сильно сомневаюсь) в школе.

    На помощь вновь приходят расширения. Необходимо создать в глубинах проекта файлик со следующим содержанием:
    Код:
    namespace MyLaba
    {
            public static class TrollExtensions
            {
                  public static void ExecAction<T>(this T subj, Action<T> action)
                  {
                       action(subj);
                  }
            }
    }
    Теперь можем применять это где захотим, берем переменную/константу любого типа, ставим "." выбираем в Intellisence эту функцию и юзаем.



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

    Код:
                new char[] { 'a', 'b', 'c' }.ExecAction(x =>
                {
                    for (int i = 0; i < x.Length; i++)                
                        Console.WriteLine(x[i]);                
                });
    если хотим делать что-то с данными дальше по цепочке, то можно заменить Action<T> на Func<T1,T2>

  4. 1 пользователь сказал cпасибо Dron247 за это полезное сообщение:

    SH! (24.09.2010)

  5. #3
    Наш Чел Dron247 кто это? Аватар для Dron247
    Регистрация
    18.07.2007
    Адрес
    Братск
    Возраст
    35
    Сообщений
    298
    Поблагодарил(а)
    29
    Получено благодарностей: 37 (сообщений: 32).

    По умолчанию Перебор IPv4 адресов C#

    Возникла такая задача, привычным движением руки взял и загуглил, может я еще плохо искать умею. но... не нашел, тот кровавый ###### который советуют люди на различных форумах заставил меня лить горючие слёзы. Пришлось делать все самому.


    Нужно игнорировать советы вроде "Работай как со строкой", так как IP адрес - не строка, и выглядит так, как выглядит только по одной причине - читабельность.

    IPv4 адрес - набор из 32х бит. Подробнее можно узнать по этой теме на специальности ИСиТ в конторе, ну или на худой конец в википедии.

    Функция свертывания массива байтов в четырехбайтное целое.
    Код:
            private int CompressByteArray(byte[] bytes)
            {
                //Проверяем является ли массив подходящим для свертывания в int
                if (bytes.Length != 4) throw new FormatException("Wrong IPv4 address");
                int retval = 0; byte bit_shift = 0;
                for (int i = bytes.Length - 1; i >= 0; i--)
                {
                    //Прибавляем к финальному значению байты со сдвигом, 
                    //зависящим от текущего элемента массива
                    retval += ((int)bytes[i]) << bit_shift;
                    bit_shift += 8;
                }
                return retval;
            }
    Этот и весь следующий код предназначен исключительно для ipv4, не было желания парить себя хранением 128 битовых адресов.

    Функция развертывания целого числа в массив байтов.
    Код:
            private byte[] DecompressByteArray(int ip)
            {
                //Разбиваем целое число на байты           
                var bytes = BitConverter.GetBytes(ip);   
                //Разворачиваем в нужную последовательность     
                Array.Reverse(bytes);
                return bytes;
            }
    Ну и наконец та функция, которая и будет выводить список всех адресов диапазона.
    Код:
            public IPAddress[] ExpandIpRange(IPAddress RangeFirst, IPAddress RangeLast)
            {
                //Сворачиваем байты адреса в целое число
                var start_ip = (uint)(CompressByteArray(RangeFirst.GetAddressBytes()));
                //Расчитываем дельту адресов(можно простым вычитанием, но xor логичнее и быстрее)
                var delta = (uint)(CompressByteArray(RangeLast.GetAddressBytes()) ^ start_ip);
                IPAddress[] retval = new IPAddress[delta+1];
                //Создаем список адресов диапазона
                //перебор осуществляется простым приращением
                for (uint i = 0; i <= delta; i++)  
                    //Разворачиваем число в массив байтов
                    //Создаем экземпляр Ip адреса и передаем массив в конструктор
                    //Добавляем адрес в список
                    try { retval[i] = new IPAddress(DecompressByteArray((int)(start_ip + i))); }
                    catch { continue; }
                return retval;
            }
    Использование. Предположим, что у нас консольное приложение, функции описанные выше можно добавить сразу перед/после main.
    Код:
            static void Main(string[] args)
            {
                IPAddress addr = new IPAddress(new byte[] { 17, 0, 0, 1 });
                IPAddress addr2 = new IPAddress(new byte[] { 17, 0, 2, 125 });
                var t = new TestovyPoligon.Program();
                var ips = t.ExpandIpRange(addr, addr2);
                foreach (var ip in ips)
                    Console.WriteLine(ip.ToString());
            }
    Последний раз редактировалось Dron247; 08.02.2011 в 15:26. Причина: Ошибки

  6. #4
    Наш Чел Dron247 кто это? Аватар для Dron247
    Регистрация
    18.07.2007
    Адрес
    Братск
    Возраст
    35
    Сообщений
    298
    Поблагодарил(а)
    29
    Получено благодарностей: 37 (сообщений: 32).

    По умолчанию Winforms C#

    Как сделать такое:



    Таким:



    Код:
    class ListViewEx : ListView {
             protected override void OnHandleCreated(EventArgs e)
             {
                 base.OnHandleCreated(e);
                 if (OSVersion.IsVistaOrLater)
                     SetWindowTheme(Handle, "explorer", null);
             }
              [DllImport("UxTheme", CharSet = CharSet.Unicode)]
             private extern static int SetWindowTheme(IntPtr hWnd, string pszSubAppName, string pszSubIdList);
     }
    Источник

  7. #5
    Мастер Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Papa-Bear Закрылки на взлет Аватар для Papa-Bear
    Регистрация
    26.09.2005
    Возраст
    41
    Сообщений
    888
    Поблагодарил(а)
    146
    Получено благодарностей: 505 (сообщений: 270).

    По умолчанию

    Цитата Сообщение от Dron247 Посмотреть сообщение
    Как сделать такое:

    Таким:
    А без этого кода в висте разве будет XP-шный вид?
    ...а вы еще говорите, что Сталин сволочь.

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

     

Похожие темы

  1. Ваши любимые актеры
    от GAARA в разделе Фильмы
    Ответов: 35
    Последнее сообщение: 03.09.2012, 19:56
  2. Ваши любимые...
    от Shved в разделе Rock
    Ответов: 7
    Последнее сообщение: 09.03.2010, 13:59
  3. Спутниковый инет: ваши впечатления
    от Dмитрий в разделе Интернет/Веб-дизайн
    Ответов: 1
    Последнее сообщение: 18.01.2008, 16:35
  4. Высокий каблук: ваши взгляды
    от РЕГ ПОТРОШИТЕЛЬ в разделе Угол зрения
    Ответов: 131
    Последнее сообщение: 11.11.2007, 16:59
  5. Tips & Tricks
    от nons в разделе Software
    Ответов: 1
    Последнее сообщение: 03.09.2005, 21:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru
Администрация сайта не выражает согласия
с высказыванием участников форума и не несет
ответственности за их содержание.

Копирование любого материала возможно только
при наличии ссылки на сайт.