C#实现英文名词所有格自动匹配 简化字符串语法处理逻辑
实现方案
首先明确你场景下适用的所有格判定规则:单数人名以字符s结尾时所有格加',其余情况加's,完全匹配你给出的示例需求。
你原有代码里的Friend + i写法是错误的,C#不支持直接拼接字符串获取对应变量名的值,所以我们先把所有人名存入数组遍历,再封装一个通用的后缀计算逻辑即可,不需要单独定义每个所有格变量。
完整可运行代码
using System; namespace Prac { class Program { // 通用的获取名词所有格后缀的方法 static string GetGenitiveSuffix(string name) { // 空字符串兼容处理 if (string.IsNullOrWhiteSpace(name)) return ""; // 取最后一个字符判断是否为s,兼容大小写的话可以补充.ToLower()逻辑 char lastChar = name[^1]; return lastChar == 's' || lastChar == 'S' ? "'" : "'s"; } static void Main(string[] args) { // 所有人名存入数组,后续新增人名仅需要修改该数组即可 string[] friends = new string[] { "Kennedy", "James", "Ngolo Kante" }; Console.WriteLine($"My friends are named {string.Join(", ", friends[0..^1])} and {friends[^1]}"); // 输出效果和你原有的三条单独WriteLine完全一致 foreach (var friend in friends) { Console.WriteLine($"{friend}{GetGenitiveSuffix(friend)} name has {friend.Length} letters"); } // 你要求的for循环输出,效果和上方输出完全一致 for (int i = 0; i < friends.Length; i++) { var friend = friends[i]; Console.WriteLine($"{friend}{GetGenitiveSuffix(friend)} name has {friend.Length} letters"); } Console.ReadLine(); } } }
逻辑说明
- 封装的
GetGenitiveSuffix方法可复用给任意人名,不需要提前为每个名字配置所有格变量 - 直接读取字符串最后一个字符判断后缀,符合你提到的实现思路
- 用数组存储人名避免了动态拼变量名的错误写法,后续新增人名仅需要往数组中追加元素即可,不需要修改其他业务逻辑
内容的提问来源于stack exchange,提问作者Jakob jensen
相关产品推荐
相关产品推荐

