《常用的C#类》
C#作为.NET平台的核心编程语言,凭借其面向对象特性、强类型系统和丰富的类库,成为企业级应用开发的首选。本文将系统梳理C#开发中高频使用的核心类,涵盖基础类型、集合操作、文件处理、日期时间、网络通信、异步编程等关键领域,通过代码示例和场景分析帮助开发者高效运用这些工具。
一、基础数据类型类
1.1 数值类型封装类
C#通过结构体封装基本数值类型,提供格式化、转换和运算支持:
// 整数类型转换示例
int num = 123;
string strNum = num.ToString("D5"); // 输出"00123"
long bigNum = Convert.ToInt64(strNum); // 字符串转长整型
// 浮点数精度控制
double pi = 3.1415926;
string formattedPi = pi.ToString("F4"); // 输出"3.1416"
decimal price = 19.99m; // 高精度货币计算
关键类:Int32、Int64、Double、Decimal、Convert
1.2 字符串处理类
String类提供200+方法,StringBuilder优化高频修改场景:
// 字符串操作示例
string greeting = "Hello, World!";
int index = greeting.IndexOf(','); // 查找字符位置
string subStr = greeting.Substring(0, 5); // 截取"Hello"
bool contains = greeting.Contains("World"); // 判断包含
// StringBuilder性能对比
StringBuilder sb = new StringBuilder();
for (int i = 0; i
关键类:String、StringBuilder、Char、StringComparison
二、集合框架类
2.1 线性集合
List
// List操作示例
List names = new List { "Alice", "Bob" };
names.Add("Charlie"); // 尾部添加
names.Insert(1, "David"); // 指定位置插入
string removed = names.RemoveAt(0); // 移除并返回元素
// LinkedList高效插入
LinkedList numbers = new LinkedList();
var node = numbers.AddFirst(10); // 头节点
numbers.AddAfter(node, 20); // 节点后插入
关键类:List
2.2 键值集合
Dictionary与SortedDictionary性能差异:
// Dictionary操作示例
Dictionary ages = new Dictionary();
ages.Add("Alice", 25);
ages["Bob"] = 30; // 索引器赋值
if (ages.TryGetValue("Charlie", out int age)) {
Console.WriteLine(age);
}
// SortedDictionary自动排序
var sortedAges = new SortedDictionary();
sortedAges.Add("Zoe", 28); // 自动按键排序
关键类:Dictionary
三、文件与流操作类
3.1 文件系统操作
File类提供静态方法简化常见操作:
// 文件读写示例
string content = File.ReadAllText("test.txt"); // 读取全部文本
File.WriteAllLines("output.txt", new[] { "Line1", "Line2" }); // 写入多行
// Directory目录操作
string[] files = Directory.GetFiles(@"C:\Temp", "*.log"); // 搜索文件
Directory.CreateDirectory(@"C:\Temp\Sub"); // 创建目录
关键类:File、FileInfo、Directory、DirectoryInfo、Path
3.2 流式读写
FileStream与MemoryStream适用场景:
// 大文件分块读取
using (var fs = new FileStream("large.dat", FileMode.Open)) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0) {
ProcessChunk(buffer, bytesRead); // 处理数据块
}
}
// MemoryStream内存操作
var ms = new MemoryStream();
byte[] data = Encoding.UTF8.GetBytes("Hello");
ms.Write(data, 0, data.Length);
ms.Position = 0; // 重置指针
string result = Encoding.UTF8.GetString(ms.ToArray());
关键类:FileStream、MemoryStream、StreamReader、StreamWriter、BinaryReader
四、日期与时间处理类
4.1 DateTime结构体
// 日期运算示例
DateTime now = DateTime.Now;
DateTime tomorrow = now.AddDays(1);
TimeSpan duration = tomorrow - now; // 时间间隔
// 格式化输出
string isoDate = now.ToString("yyyy-MM-dd"); // "2023-05-20"
string custom = now.ToString("dddd, MMMM dd"); // "Saturday, May 20"
关键类:DateTime、DateTimeOffset、TimeSpan、TimeZoneInfo
4.2 定时器类
System.Timers.Timer与System.Threading.Timer对比:
// System.Timers.Timer示例
var timer = new System.Timers.Timer(1000); // 1秒间隔
timer.Elapsed += (s, e) => Console.WriteLine($"Tick at {e.SignalTime}");
timer.AutoReset = true; // 自动重复
timer.Start();
// System.Threading.Timer轻量级实现
var threadTimer = new System.Threading.Timer(
state => Console.WriteLine("Thread timer tick"),
null, 0, 2000); // 延迟0ms后每2秒触发
五、网络通信类
5.1 HttpClient现代HTTP客户端
// 异步HTTP请求示例
async Task FetchDataAsync() {
using var client = new HttpClient();
client.BaseAddress = new Uri("https://api.example.com");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("/data");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
关键类:HttpClient、HttpRequestMessage、HttpResponseMessage、HttpClientHandler
5.2 TCP/IP通信
TcpClient与TcpListener实现基础网络通信:
// TCP服务器示例
var listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
Console.WriteLine("Waiting for connection...");
using (var client = await listener.AcceptTcpClientAsync()) {
using (var stream = client.GetStream()) {
byte[] buffer = new byte[1024];
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Received: {message}");
}
}
关键类:TcpClient、TcpListener、NetworkStream、Socket
六、异步编程核心类
6.1 Task与Task
// Task并行执行示例
async Task ProcessDataAsync() {
Task task1 = LongRunningOperationAsync(1);
Task task2 = LongRunningOperationAsync(2);
int[] results = await Task.WhenAll(task1, task2);
Console.WriteLine($"Results: {string.Join(",", results)}");
}
async Task LongRunningOperationAsync(int id) {
await Task.Delay(1000); // 模拟I/O操作
return id * 10;
}
关键类:Task、Task
6.2 并行循环与数据并行
Parallel类与PLINQ对比:
// Parallel.For示例
Parallel.For(0, 100, i => {
Console.WriteLine($"Processing {i} on thread {Thread.CurrentThread.ManagedThreadId}");
});
// PLINQ数据并行
var numbers = Enumerable.Range(1, 1000);
var evenSquares = numbers.AsParallel()
.Where(n => n % 2 == 0)
.Select(n => n * n);
关键类:Parallel、ParallelLoopState、ParallelOptions、PLINQ
七、实用工具类
7.1 随机数生成
// Random类用法
var random = new Random();
int diceRoll = random.Next(1, 7); // 1-6的随机数
double randomDouble = random.NextDouble(); // [0.0,1.0)区间
// 加密安全随机数
using var rng = RandomNumberGenerator.Create();
byte[] bytes = new byte[16];
rng.GetBytes(bytes); // 生成16字节加密安全随机数
关键类:Random、RandomNumberGenerator、CryptoRandom(第三方)
7.2 编码转换
// 编码转换示例
string text = "中文测试";
byte[] utf8Bytes = Encoding.UTF8.GetBytes(text);
string utf16Text = Encoding.Unicode.GetString(utf8Bytes); // 可能乱码
// 正确转换方式
byte[] originalBytes = Encoding.Convert(
Encoding.UTF8,
Encoding.GetEncoding("GB2312"),
utf8Bytes);
string gbText = Encoding.GetEncoding("GB2312").GetString(originalBytes);
关键类:Encoding、Encoder、Decoder、CodePagesEncodingProvider
关键词:C#类库、集合框架、文件操作、异步编程、网络通信、DateTime、Task、HttpClient、StringBuilder、Dictionary
简介:本文系统梳理C#开发中常用的核心类,涵盖基础数据类型、集合操作、文件流处理、日期时间管理、网络通信、异步编程等关键领域,通过代码示例和场景分析展示这些类的典型用法和性能优化技巧,帮助开发者提升.NET应用开发效率。