首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

七個實用 C# 程式設計小技巧

     編輯:關於C語言

技巧一:點擊關閉鈕時最小化而非關閉視窗

protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_CLOSE = 0xF060;
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
    {
        this.WindowState = FormWindowState.Minimized;
        return;
    }
    base.WndProc(ref m);
}

技巧二:讓 foreach 迴圈跑得更快

foreach 編譯後會產生 IEnumerator 與 try/finally 區塊,帶來額外開銷。對效能敏感的熱路徑,改用 for 迴圈直接索引存取 List<T> 或陣列可顯著提升速度。

技巧三:將圖片序列化儲存為 XML

using (var stream = new FileStream("Image.xml", FileMode.Create))
{
    var formatter = new SoapFormatter();
    Image img = Image.FromFile("Image.bmp");
    formatter.Serialize(stream, img);
}

利用 SoapFormatter 將 Image 物件序列化為 XML 格式,便於設定檔儲存或傳輸。

技巧四:在 RichTextBox 中封鎖 Ctrl+V 貼上

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.V)
        e.Handled = true; // 標記為已處理,取消預設貼上行為
}

TextBox 無法攔截 Ctrl+V,改用 RichTextBox 並處理 KeyDown 即可。

技巧五:判斷檔案或目錄是否存在

bool fileExists = File.Exists(path);
bool dirExists = Directory.Exists(path);

位於 System.IO 命名空間,簡單直觀。

技巧六:使用 delegate 設計自訂事件

// 1. 定義委派型別
public delegate void MyEventHandler(object sender, long lineNumber);

// 2. 類別中宣告事件
public class DataImporter
{
    public event MyEventHandler NewLineRead;

    public void ImportData()
    {
        long line = 0;
        while (/* 讀取資料 */)
        {
            line++;
            NewLineRead?.Invoke(this, line); // 觸發事件
        }
    }
}

// 3. 用戶端訂閱
var importer = new DataImporter();
importer.NewLineRead += (s, n) => Console.WriteLine($"已讀取第 {n} 行");
importer.ImportData();

技巧七:IP 與主機名互解

using System.Net;

string GetHostName(string ip) => Dns.GetHostEntry(ip).HostName;
string GetIpAddress(string host) => Dns.GetHostEntry(host).AddressList[0].ToString();

注意:.NET Core / .NET 5+ 建議改用 Dns.GetHostEntryAsync 非同步版本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved