当前位置: 首页 > news >正文

C#开发者必知的100个黑科技(后50)!从主构造函数到源生成器全面掌握

C#开发者必知的100个黑科技(后50)!从主构造函数到源生成器全面掌握

Posted on 2026-01-05 00:00  lzhdim  阅读(0)  评论(0)    收藏  举报
  1. 51. StringBuilder:字符串操作的利器
    处理大型字符串或频繁拼接时,StringBuilder是最佳选择。相比普通字符串拼接,它的效率更高。

var sb = new StringBuilder();  
sb.Append("Hello, ");  
sb.Append("world!");  
string result = sb.ToString();  

  1. 52. TryParse:安全解析的守护者
    用TryParse替代可能抛出异常的Parse,安全处理无效输入。

if (int.TryParse("123", out int number))  
{  
    Console.WriteLine($"Parsed number: {number}");  
}  
else  
{  
    Console.WriteLine("Invalid input.");  
}  

  1. 53. nameof与枚举的协作
    通过nameof获取枚举值的名称,提升代码可维护性。

enum Status { Pending, Approved, Rejected }  
Console.WriteLine(nameof(Status.Approved)); // 输出 "Approved"  

  1. 54. Enum.TryParse:枚举解析的安全网
    避免解析枚举时的异常,使用Enum.TryParse确保安全。

if (Enum.TryParse("Approved", out Status status))  
{  
    Console.WriteLine($"Status: {status}");  
}  

  1. 55. StringComparison:大小写比较的避坑指南
    显式指定StringComparison,杜绝大小写比较的潜在bug。

if (string.Equals("hello", "HELLO", StringComparison.OrdinalIgnoreCase))  
{  
    Console.WriteLine("Strings are equal.");  
}  

  1. 56. String.IsNullOrWhiteSpace:空值/空字符串检测神器
    一步检测null、空字符串或空白字符。

if (string.IsNullOrWhiteSpace(input))  
{  
    Console.WriteLine("Input is invalid.");  
}  

  1. 57. Stopwatch:代码性能的计时器
    测量代码执行时间,优化性能瓶颈。

var stopwatch = Stopwatch.StartNew();  
// Your code here  
stopwatch.Stop();  
Console.WriteLine($"Elapsed time: {stopwatch.ElapsedMilliseconds} ms");  

  1. 58. Environment.NewLine:跨平台换行的秘密武器
    替代硬编码的\n或\r\n,实现跨平台兼容。

Console.WriteLine($"Line 1{Environment.NewLine}Line 2");  

  1. 59. Guid.NewGuid:生成全球唯一的ID
    需要唯一标识符?Guid.NewGuid()瞬间生成。

var uniqueId = Guid.NewGuid();  
Console.WriteLine($"Unique ID: {uniqueId}");  

  1. 60. DateTimeOffset:时区友好的时间管家
    处理多时区场景时,比DateTime更可靠。

var now = DateTimeOffset.Now;  
Console.WriteLine($"Current time: {now}");  

  1. 61. TimeSpan:时间间隔的精确计算
    表示时间跨度,如小时、分钟、秒。

var duration = new TimeSpan(2, 30, 0); // 2小时30分钟  
Console.WriteLine($"Duration: {duration}");  

  1. 62. HashSet:唯一值的集合仓库
    自动去重,确保集合元素唯一。

var uniqueNumbers = new HashSet<int> { 1, 2, 3, 3 };  
Console.WriteLine($"Count: {uniqueNumbers.Count}"); // 输出 3  

  1. 63. Dictionary:键值对的快速查找表
    通过键快速访问值,提升查询效率。

var ages = new Dictionary<string, int>  
{  
    { "Alice", 30 },  
    { "Bob", 25 }  
};  
Console.WriteLine($"Alice's age: {ages["Alice"]"]);  

  1. 64. SortedDictionary:有序键值对的排列大师
    按键自动排序,方便有序遍历。

var sortedAges = new SortedDictionary<string, int>  
{  
    { "Bob", 25 },  
    { "Alice", 30 }  
};  

  1. 65. ConcurrentDictionary:线程安全的字典
    多线程环境下安全地进行增删改查。

var concurrentAges = new ConcurrentDictionary<string, int>();  
concurrentAges.TryAdd("Alice", 30);  

  1. 66. Queue:先进先出的消息队列
    实现FIFO(先进先出)操作。

var queue = new Queue<int>();  
queue.Enqueue(1);  
queue.Enqueue(2);  
Console.WriteLine($"Dequeued: {queue.Dequeue()}"); // 输出 1  

  1. 67. Stack:后进先出的栈结构
    适合LIFO(后进先出)场景,如撤销操作。

var stack = new Stack<int>();  
stack.Push(1);  
stack.Push(2);  
Console.WriteLine($"Popped: {stack.Pop()}"); // 输出 2  

  1. 68. BitArray:紧凑的位存储方案
    高效存储布尔值,节省内存空间。

var bits = new BitArray(new[] { true, false, true });  
Console.WriteLine($"Bit at index 0: {bits[0]}"); // 输出 True  

  1. 69. ObservableCollection:数据绑定的实时监控者
    UI开发中实现数据绑定,自动响应集合变化。

var collection = new ObservableCollection<string>();  
collection.CollectionChanged += (sender, e) => Console.WriteLine("Collection changed!");  
collection.Add("Item 1");  

  1. 70. Lazy:延迟初始化的懒人福音
    对象按需创建,减少资源浪费。

var lazyValue = new Lazy<int>(() => 42);  
Console.WriteLine($"Lazy value: {lazyValue.Value});  

  1. 71. ThreadLocal:线程专属的数据容器
    每个线程维护独立副本,避免数据污染。

var threadLocal = new ThreadLocal<int>(() => 42);  
Console.WriteLine($"Thread-local value: {threadLocal.Value});  

  1. 72. SemaphoreSlim:资源调度的交通灯
    控制并发访问数量,防止资源过载。

var semaphore = new SemaphoreSlim(2); // 允许2个并发访问  
await semaphore.WaitAsync();  
// 访问资源  
semaphore.Release();  

  1. 73. CancellationTokenSource:任务取消的总指挥
    优雅终止耗时任务,避免资源泄漏。

var cts = new CancellationTokenSource();  
var task = Task.Run(() =>  
{  
    while (!cts.Token.IsCancellationRequested)  
    {  
        // Do work  
    }  
}, cts.Token);  
cts.Cancel();  

  1. 74. Task.Delay:异步世界的暂停键
    在异步代码中引入延迟,模拟耗时操作。

await Task.Delay(1000); // 模拟1秒延迟  

  1. 75. Task.FromResult:立即返回的占位符
    快速创建已完成的Task,简化结果返回。

var task = Task.FromResult(42);  
Console.WriteLine($"Result: {task.Result});  

  1. 76. Task.Run:CPU密集型任务的卸货码头
    将耗时计算转移到后台线程。

await Task.Run(() =>  
{  
    // CPU-bound work  
});  

  1. 77. Task.WhenAll:多任务协作的指挥官
    等待多个任务全部完成,再继续执行。

var tasks = new[] { Task.Delay(1000), Task.Delay(2000) };  
await Task.WhenAll(tasks);  

  1. 78. Task.WhenAny:抢占先机的竞争者
    处理第一个完成的Task,提升响应速度。

var tasks = new[] { Task.Delay(1000), Task.Delay(2000) };  
var completedTask = await Task.WhenAny(tasks);  

  1. 79. Parallel.ForEach:并行处理的流水线
    对集合进行并行遍历,提升处理速度。

Parallel.ForEach(Enumerable.Range(1, 10), i =>  
{  
    Console.WriteLine($"Processing {i}");  
});  

  1. 80. Parallel.Invoke:多线程执行的启动器
    同时执行多个独立操作。

Parallel.Invoke(  
    () => Console.WriteLine("Action 1"),  
    () => Console.WriteLine("Action 2")  
);  

  1. 81. Interlocked:线程安全的原子操作
    确保计数器等共享变量的原子性。

int counter = 0;  
Interlocked.Increment(ref counter);  

  1. 82. MemoryCache:内存中的高速缓存
    缓存常用数据,减少数据库/文件访问。

var cache = new MemoryCache(new MemoryCacheOptions());  
cache.Set("key", "value");  
var value = cache.Get("key");  

  1. 83. ConcurrentBag:线程安全的杂货铺
    高并发场景下的无序集合。

var bag = new ConcurrentBag<int>();  
bag.Add(42);  
bag.TryTake(out int result);  

  1. 84. BlockingCollection:生产者-消费者模式的纽带
    阻塞式集合,简化生产消费流程。

var collection = new BlockingCollection<int>();  
collection.Add(42);  
var item = collection.Take();  

  1. 85. Channel:异步数据管道
    在任务间传递数据,实现解耦通信。

var channel = Channel.CreateUnbounded<int>();  
await channel.Writer.WriteAsync(42);  
var item = await channel.Reader.ReadAsync();  

  1. 86. DataAnnotations:模型验证的标注神器
    通过属性标注实现自动验证。

public class Person  
{  
    [Required]  
    public string Name { get; set; }  
}  

  1. 87. Regex:正则表达式的瑞士军刀
    强大的字符串匹配工具。

var regex = new Regex(@"\d+");  
var match = regex.Match("123");  
Console.WriteLine($"Match: {match.Value}");  

  1. 88. JsonSerializer:JSON序列化的快捷方式
    轻松实现对象与JSON的相互转换。

var person = new Person { Name = "Alice" };  
var json = JsonSerializer.Serialize(person);  
var deserialized = JsonSerializer.Deserialize<Person>(json);  

  1. 89. XmlSerializer:XML处理的传统艺能
    适用于XML序列化的经典方案。

var serializer = new XmlSerializer(typeof(Person));  
using var writer = new StringWriter();  
serializer.Serialize(writer, person);  

  1. 90. FileStream:文件操作的底层通道
    直接操作文件流,处理二进制数据。

using var stream = new FileStream("file.txt", FileMode.Open);  
// Read or write to the file  

  1. 91. StreamReader/StreamWriter:文本文件的读写助手
    简化文本文件的读取与写入。

using var reader = new StreamReader("file.txt");  
var content = reader.ReadToEnd();  

  1. 92. Path:文件路径的魔术师
    处理文件路径的拼接与分割。

var fullPath = Path.Combine("folder", "file.txt");  
Console.WriteLine($"Full path: {fullPath}");  

  1. 93. Directory:目录管理的指挥官
    批量处理文件夹与文件。

var files = Directory.GetFiles("folder");  

  1. 94. FileSystemWatcher:文件系统监控员
    实时监听文件变化事件。

var watcher = new FileSystemWatcher("folder");  
watcher.Created += (sender, e) => Console.WriteLine($"File created: {e.Name}");  
watcher.EnableRaisingEvents = true;  

  1. 95. HttpClient:HTTP请求的王者
    发起GET/POST等HTTP请求,处理Web服务。

var client = new HttpClient();  
var response = await client.GetAsync("https://example.com");  

  1. 96. WebSocket:实时通讯的桥梁
    建立持久连接,实现双向实时通信。

var websocket = new ClientWebSocket();  
await websocket.ConnectAsync(new Uri("wss://example.com"), CancellationToken.None);  

  1. 97. Socket:网络通信的底层接口
    基于TCP/IP的低级网络操作。

var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
socket.Connect("example.com", 80);  

  1. 98. Process:外部程序的执行者
    启动和管理系统进程。

var process = new Process  
{  
    StartInfo = new ProcessStartInfo("notepad.exe")  
};  
process.Start();  

  1. 99. Environment:系统信息的百宝箱
    获取操作系统、硬件等环境信息。

Console.WriteLine($"OS Version: {Environment.OSVersion});  

  1. 100. AppDomain:应用程序域的管理员
    创建和管理独立的应用程序域。

var domain = AppDomain.CreateDomain("NewDomain");  
domain.ExecuteAssembly("app.exe");