字符串(String)是C#中最常用的数据类型之一。
姓名、地址、消息、JSON、XML、状态、类型名称——字符串无处不在。
但当我们过度使用字符串时,问题就会显现——
它们会变得脆弱、易错,且难以维护。
本文将带你深入探讨:
SendNotification("email"); // 如果手误写成"emial"怎么办?
C#编译器无法判断"email"是否合法。
因为字符串只是数据,不承载语义。
当代码中出现以下模式时:
if (role == "Admin") { ... }
if (status == "Active") { ... }
if (type == "Customer") { ... }
这些都是"魔法字符串"——硬编码的值,没有编译时验证,会给后期维护埋下巨大隐患。
扩展方法:颠覆你对C#的认知
"C#最被低估的强大特性!"
medium.com
if (action == "delete")
{
// 删除用户
}
如果某处写成"Delete"?
它不会抛出运行时异常——而是直接失效。
应用中有80处使用"Approved"字符串——现在要改名为ApprovedByManager。
你确定能找到所有引用吗?
不可能!因为字符串不受引用检查约束!
public enum UserRole
{
Admin,
User,
Guest
}
if (user.Role == UserRole.Admin)
优势:
public static class Status
{
public const string Active = "Active";
public const string Inactive = "Inactive";
}
if (status == Status.Active)
优点:
public record EmailAddress(string Value);
EmailAddress email = new("john@example.com");
优势:
OneOf<EmailNotification, SMSNotification, PushNotification> notification;
优点:
Entity Framework性能陷阱揭秘
"数据在加载,但时钟显示午饭时间到了!为什么这么慢?"这是开发者经常遇到的灵魂拷问...
medium.com
糟糕的字符串方案:
public void Process(string action)
{
if (action == "Create") { ... }
else if (action == "Delete") { ... }
}
优雅的枚举方案:
public enum ActionType
{
Create,
Delete
}
public void Process(ActionType action)
{
switch(action)
{
case ActionType.Create: ...
case ActionType.Delete: ...
}
}
强类型意味着:
通过C#源生成器,可以在编译时从API数据自动生成枚举或类,例如:
"字符串是工具,但不是万能药!"
当所有东西都用字符串表示时,代码就像弱类型语言。
而合理使用枚举、记录、常量和自定义类型,你的代码将:
✅ 更安全
✅ 更优雅
✅ 更易重构
✅ 更少缺陷