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

作者:微信公众号:【架构师老卢】
3-15 15:39
29

  1. StringBuilder:字符串操作的利器
    处理大型字符串或频繁拼接时,StringBuilder是最佳选择。相比普通字符串拼接,它的效率更高。
var sb = new StringBuilder();  
sb.Append("Hello, ");  
sb.Append("world!");  
string result = sb.ToString();  
  1. TryParse:安全解析的守护者
    用TryParse替代可能抛出异常的Parse,安全处理无效输入。
if (int.TryParse("123", out int number))  
{  
    Console.WriteLine($"Parsed number: {number}");  
}  
else  
{  
    Console.WriteLine("Invalid input.");  
}  
  1. nameof与枚举的协作
    通过nameof获取枚举值的名称,提升代码可维护性。
enum Status { Pending, Approved, Rejected }  
Console.WriteLine(nameof(Status.Approved)); // 输出 "Approved"  
  1. Enum.TryParse:枚举解析的安全网
    避免解析枚举时的异常,使用Enum.TryParse确保安全。
if (Enum.TryParse("Approved", out Status status))  
{  
    Console.WriteLine($"Status: {status}");  
}  
  1. StringComparison:大小写比较的避坑指南
    显式指定StringComparison,杜绝大小写比较的潜在bug。
if (string.Equals("hello", "HELLO", StringComparison.OrdinalIgnoreCase))  
{  
    Console.WriteLine("Strings are equal.");  
}  
  1. String.IsNullOrWhiteSpace:空值/空字符串检测神器
    一步检测null、空字符串或空白字符。
if (string.IsNullOrWhiteSpace(input))  
{  
    Console.WriteLine("Input is invalid.");  
}  
  1. Stopwatch:代码性能的计时器
    测量代码执行时间,优化性能瓶颈。
var stopwatch = Stopwatch.StartNew();  
// Your code here  
stopwatch.Stop();  
Console.WriteLine($"Elapsed time: {stopwatch.ElapsedMilliseconds} ms");  
  1. Environment.NewLine:跨平台换行的秘密武器
    替代硬编码的\n\r\n,实现跨平台兼容。
Console.WriteLine($"Line 1{Environment.NewLine}Line 2");  
  1. Guid.NewGuid:生成全球唯一的ID
    需要唯一标识符?Guid.NewGuid()瞬间生成。
var uniqueId = Guid.NewGuid();  
Console.WriteLine($"Unique ID: {uniqueId}");  
  1. DateTimeOffset:时区友好的时间管家
    处理多时区场景时,比DateTime更可靠。
var now = DateTimeOffset.Now;  
Console.WriteLine($"Current time: {now}");  
  1. TimeSpan:时间间隔的精确计算
    表示时间跨度,如小时、分钟、秒。
var duration = new TimeSpan(2, 30, 0); // 2小时30分钟  
Console.WriteLine($"Duration: {duration}");  
  1. HashSet:唯一值的集合仓库
    自动去重,确保集合元素唯一。
var uniqueNumbers = new HashSet<int> { 1, 2, 3, 3 };  
Console.WriteLine($"Count: {uniqueNumbers.Count}"); // 输出 3  
  1. Dictionary:键值对的快速查找表
    通过键快速访问值,提升查询效率。
var ages = new Dictionary<string, int>  
{  
    { "Alice", 30 },  
    { "Bob", 25 }  
};  
Console.WriteLine($"Alice's age: {ages["Alice"]"]);  
  1. SortedDictionary:有序键值对的排列大师
    按键自动排序,方便有序遍历。
var sortedAges = new SortedDictionary<string, int>  
{  
    { "Bob", 25 },  
    { "Alice", 30 }  
};  
  1. ConcurrentDictionary:线程安全的字典
    多线程环境下安全地进行增删改查。
var concurrentAges = new ConcurrentDictionary<string, int>();  
concurrentAges.TryAdd("Alice", 30);  
  1. Queue:先进先出的消息队列
    实现FIFO(先进先出)操作。
var queue = new Queue<int>();  
queue.Enqueue(1);  
queue.Enqueue(2);  
Console.WriteLine($"Dequeued: {queue.Dequeue()}"); // 输出 1  
  1. Stack:后进先出的栈结构
    适合LIFO(后进先出)场景,如撤销操作。
var stack = new Stack<int>();  
stack.Push(1);  
stack.Push(2);  
Console.WriteLine($"Popped: {stack.Pop()}"); // 输出 2  
  1. BitArray:紧凑的位存储方案
    高效存储布尔值,节省内存空间。
var bits = new BitArray(new[] { true, false, true });  
Console.WriteLine($"Bit at index 0: {bits[0]}"); // 输出 True  
  1. ObservableCollection:数据绑定的实时监控者
    UI开发中实现数据绑定,自动响应集合变化。
var collection = new ObservableCollection<string>();  
collection.CollectionChanged += (sender, e) => Console.WriteLine("Collection changed!");  
collection.Add("Item 1");  
  1. Lazy:延迟初始化的懒人福音
    对象按需创建,减少资源浪费。
var lazyValue = new Lazy<int>(() => 42);  
Console.WriteLine($"Lazy value: {lazyValue.Value});  
  1. ThreadLocal:线程专属的数据容器
    每个线程维护独立副本,避免数据污染。
var threadLocal = new ThreadLocal<int>(() => 42);  
Console.WriteLine($"Thread-local value: {threadLocal.Value});  
  1. SemaphoreSlim:资源调度的交通灯
    控制并发访问数量,防止资源过载。
var semaphore = new SemaphoreSlim(2); // 允许2个并发访问  
await semaphore.WaitAsync();  
// 访问资源  
semaphore.Release();  
  1. CancellationTokenSource:任务取消的总指挥
    优雅终止耗时任务,避免资源泄漏。
var cts = new CancellationTokenSource();  
var task = Task.Run(() =>  
{  
    while (!cts.Token.IsCancellationRequested)  
    {  
        // Do work  
    }  
}, cts.Token);  
cts.Cancel();  
  1. Task.Delay:异步世界的暂停键
    在异步代码中引入延迟,模拟耗时操作。
await Task.Delay(1000); // 模拟1秒延迟  
  1. Task.FromResult:立即返回的占位符
    快速创建已完成的Task,简化结果返回。
var task = Task.FromResult(42);  
Console.WriteLine($"Result: {task.Result});  
  1. Task.Run:CPU密集型任务的卸货码头
    将耗时计算转移到后台线程。
await Task.Run(() =>  
{  
    // CPU-bound work  
});  
  1. Task.WhenAll:多任务协作的指挥官
    等待多个任务全部完成,再继续执行。
var tasks = new[] { Task.Delay(1000), Task.Delay(2000) };  
await Task.WhenAll(tasks);  
  1. Task.WhenAny:抢占先机的竞争者
    处理第一个完成的Task,提升响应速度。
var tasks = new[] { Task.Delay(1000), Task.Delay(2000) };  
var completedTask = await Task.WhenAny(tasks);  
  1. Parallel.ForEach:并行处理的流水线
    对集合进行并行遍历,提升处理速度。
Parallel.ForEach(Enumerable.Range(1, 10), i =>  
{  
    Console.WriteLine($"Processing {i}");  
});  
  1. Parallel.Invoke:多线程执行的启动器
    同时执行多个独立操作。
Parallel.Invoke(  
    () => Console.WriteLine("Action 1"),  
    () => Console.WriteLine("Action 2")  
);  
  1. Interlocked:线程安全的原子操作
    确保计数器等共享变量的原子性。
int counter = 0;  
Interlocked.Increment(ref counter);  
  1. MemoryCache:内存中的高速缓存
    缓存常用数据,减少数据库/文件访问。
var cache = new MemoryCache(new MemoryCacheOptions());  
cache.Set("key", "value");  
var value = cache.Get("key");  
  1. ConcurrentBag:线程安全的杂货铺
    高并发场景下的无序集合。
var bag = new ConcurrentBag<int>();  
bag.Add(42);  
bag.TryTake(out int result);  
  1. BlockingCollection:生产者-消费者模式的纽带
    阻塞式集合,简化生产消费流程。
var collection = new BlockingCollection<int>();  
collection.Add(42);  
var item = collection.Take();  
  1. Channel:异步数据管道
    在任务间传递数据,实现解耦通信。
var channel = Channel.CreateUnbounded<int>();  
await channel.Writer.WriteAsync(42);  
var item = await channel.Reader.ReadAsync();  
  1. DataAnnotations:模型验证的标注神器
    通过属性标注实现自动验证。
public class Person  
{  
    [Required]  
    public string Name { get; set; }  
}  
  1. Regex:正则表达式的瑞士军刀
    强大的字符串匹配工具。
var regex = new Regex(@"\d+");  
var match = regex.Match("123");  
Console.WriteLine($"Match: {match.Value}");  
  1. JsonSerializer:JSON序列化的快捷方式
    轻松实现对象与JSON的相互转换。
var person = new Person { Name = "Alice" };  
var json = JsonSerializer.Serialize(person);  
var deserialized = JsonSerializer.Deserialize<Person>(json);  
  1. XmlSerializer:XML处理的传统艺能
    适用于XML序列化的经典方案。
var serializer = new XmlSerializer(typeof(Person));  
using var writer = new StringWriter();  
serializer.Serialize(writer, person);  
  1. FileStream:文件操作的底层通道
    直接操作文件流,处理二进制数据。
using var stream = new FileStream("file.txt", FileMode.Open);  
// Read or write to the file  
  1. StreamReader/StreamWriter:文本文件的读写助手
    简化文本文件的读取与写入。
using var reader = new StreamReader("file.txt");  
var content = reader.ReadToEnd();  
  1. Path:文件路径的魔术师
    处理文件路径的拼接与分割。
var fullPath = Path.Combine("folder", "file.txt");  
Console.WriteLine($"Full path: {fullPath}");  
  1. Directory:目录管理的指挥官
    批量处理文件夹与文件。
var files = Directory.GetFiles("folder");  
  1. FileSystemWatcher:文件系统监控员
    实时监听文件变化事件。
var watcher = new FileSystemWatcher("folder");  
watcher.Created += (sender, e) => Console.WriteLine($"File created: {e.Name}");  
watcher.EnableRaisingEvents = true;  
  1. HttpClient:HTTP请求的王者
    发起GET/POST等HTTP请求,处理Web服务。
var client = new HttpClient();  
var response = await client.GetAsync("https://example.com");  
  1. WebSocket:实时通讯的桥梁
    建立持久连接,实现双向实时通信。
var websocket = new ClientWebSocket();  
await websocket.ConnectAsync(new Uri("wss://example.com"), CancellationToken.None);  
  1. Socket:网络通信的底层接口
    基于TCP/IP的低级网络操作。
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
socket.Connect("example.com", 80);  
  1. Process:外部程序的执行者
    启动和管理系统进程。
var process = new Process  
{  
    StartInfo = new ProcessStartInfo("notepad.exe")  
};  
process.Start();  
  1. Environment:系统信息的百宝箱
    获取操作系统、硬件等环境信息。
Console.WriteLine($"OS Version: {Environment.OSVersion});  
  1. AppDomain:应用程序域的管理员
    创建和管理独立的应用程序域。
var domain = AppDomain.CreateDomain("NewDomain");  
domain.ExecuteAssembly("app.exe");  
相关留言评论
昵称:
邮箱:
阅读排行