You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:45:07