Старый 15.07.2010, 18:06   #1
W!z@rD
 
Аватар для W!z@rD
 
Регистрация: 04.07.2010
Сообщений: 33
Репутация: 15
По умолчанию Шпаргалка по C#

Предисловие
Данная тема предназначена для описания самых (на мой взгляд) основных фич которыми пользуется фрилансер.
Идея и критика по поводу топика (пункта) в ПМ.

Не претендую на уникальность, все что тут есть можно найти в гугле.
Вопросы по синтаксису, описанию методов в гугл.

Работа с Настройками
1. Сохранение настроек
Довольно таки часто необходимо в написанном софте написать возможность сохранение настроек.
Что для этого нужно?
  1. Открыть свойства проекта, во вкладке "Settings" создать "элементы" настроек пример;
  2. В требуемый момент загружать настройки. Для этого необходимо обратиться к public свойству автогенерируемого класса Settings. Имя свойства равно имени "элемента" настроек. То есть в моем случае имя элемента = "TimeOut", то и имя свойства будет TimeOut (Settings.Default.TimeOut).
  3. Для сохранения собственно операция наоборот. Тут мы присваиваем свойству значение и вызываем метод Save:
    PHP код:
    Properties.Settings.Default.Save(); //Мы вызываем метод сохранения настроек 

2. Mapping настроек в оконных приложениях
В главе 1 чтобы загрузить настройки приходилось пользовать примерно следующий подход:
  1. При загрузке вручную устанавливать настройки TimeOutTextBox.Text = Settings.Default.TimeOut;
  2. При сохранении вручную присваивать свойству значение.
Не совсем удобно так? Конечно же нормально когда у тебя в конфиге 3-4 записи, терпимо если 10 и ужас если более.
Что делать? Как поступить?
Для этого впринципе есть такая плюшка как Application Settings Mapping.
Все что от нас требуется:
  1. Выделить контрол который будем связывать с записью в конфиг файле;
  2. В Properties Windows раскрыть пункт ApplicationSettings;
  3. В PropertyBinding связать свойство Text с требуемой конфиг записью (ее прям тут можно создать);
пример

Последний раз редактировалось W!z@rD; 15.07.2010 в 18:10..
W!z@rD вне форума  
Старый 15.07.2010, 18:10   #2
W!z@rD
 
Аватар для W!z@rD
 
Регистрация: 04.07.2010
Сообщений: 33
Репутация: 15
По умолчанию

Работа с сетью
1. Получаем код ответа
Нижеследующий код помогает вернуть код ответа (200, 302, 404, 500, etc) от сервера.
PHP код:
public static HttpStatusCode GetStatus(string url)
{
    var 
httpWReq = (HttpWebRequestWebRequest.Create(url);
    
httpWReq.Method "HEAD";
    
HttpWebResponse httpWResp;
    try
    {
        
using (httpWResp = (HttpWebResponse)httpWReq.GetResponse())
        {
            return 
httpWResp.StatusCode;
        }
    }
    catch (
WebException e)
    {
        return 
e.Response == null HttpStatusCode.NotFound : ((HttpWebResponse)e.Response).StatusCode;
    }

2. GET запрос
PHP код:
public string SendGet()
{
    try
    {
        var 
httpWebRequest = (HttpWebRequestWebRequest.Create("http://site.com");
        
httpWebRequest.AllowAutoRedirect false;//Запрещаем автоматический реддирект
        
httpWebRequest.Method "GET"//Можно не указывать, по умолчанию используется GET.
        
httpWebRequest.Referer "https://rdot.org";
        
httpWebRequest.UserAgent UserAgent;
        
using (var httpWebResponse = (HttpWebResponsehttpWebRequest.GetResponse())
        {
            
using (var stream httpWebResponse.GetResponseStream())
            {
                
using (var reader = new StreamReader(streamEncoding.GetEncoding(httpWebResponse.CharacterSet)))
                {
                    return 
reader.ReadToEnd();
                }
            }
        }
    }
    catch
    {
        return 
null
    
}

3. POST запрос
PHP код:
public string SendPost(string postData)
{
    var 
httpWebRequest = (HttpWebRequest)WebRequest.Create("http://site.com");
    
httpWebRequest.AllowAutoRedirect false;
    
httpWebRequest.Method "POST";
    
httpWebRequest.ContentType "application/x-www-form-urlencoded";
    var 
buffer Encoding.ASCII.GetBytes(postData);
    
httpWebRequest.ContentLength buffer.Length;
    
using (var writer httpWebRequest.GetRequestStream())
    {
        
writer.Write(buffer0buffer.Length);
    }
    
using (var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse())
    {
        
using (var stream httpWebResponse.GetResponseStream())
        {
            
using (var reader = new StreamReader(streamEncoding.GetEncoding(httpWebResponse.CharacterSet)))
            {
                return 
reader.ReadToEnd();
            }
        }
    }


Последний раз редактировалось W!z@rD; 15.07.2010 в 18:14..
W!z@rD вне форума  
Старый 18.07.2010, 12:27   #3
W!z@rD
 
Аватар для W!z@rD
 
Регистрация: 04.07.2010
Сообщений: 33
Репутация: 15
По умолчанию

Парсинг текста
Спасибо scrat'у за ПМ.
1. Регулярные выражения
Довольно часто требуется написать парсер чего-нибудь.
Скажем мы пишем граббер проксей.
Собственно ежу понятно что извращения вроде: while + IndexOf + Remove и тому подобное не айс. Тут спасают регулярные выражения.
  1. Создаем экземпляр класса Regex
  2. Указываем паттерн (шаблон поиска) + опции
  3. Скармливаем данные (в нашем случае исходник страницы с прокси списком)
  4. Получаем коллекцию совпадений Matches
  5. Получаем требуемое значение из совпадения (Match)
Небольшой пример
PHP код:
public List<stringGetResult(string pageSource)
{
    var 
= new List<string>();
    var 
tmp = new Regex(@"<a\s+title="".*?""\s+href=http://(.*?)>"RegexOptions.Compiled RegexOptions.IgnoreCase).Matches(pageSource);
    foreach (
Match m in tmp)
    {
        
s.Add(m.Value);
    }
    return 
s;

2. Дополнительные ссылки
википедия
огромная коллекция паттернов + инструмент для тестирования
RSDN

Последний раз редактировалось W!z@rD; 18.07.2010 в 16:54..
W!z@rD вне форума  
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot