C# Return";a「;或;";基于输入字符串

C# Return";a「;或;";基于输入字符串,c#,C#,好吧,这是个棘手的问题。我想做一个函数,它接受一个输入字符串,并返回一个语法正确的附录 示例(输入->所需输出): 苹果->苹果 汽车->汽车 荣誉->荣誉 起初,我心不在焉地写了一个足够简单的函数来检查单词开头的元音,并根据它返回一个附录。。。但后来我被提醒,这不是唯一一次返回“an”而不是“a”,而且它实际上是基于输入单词开头的声音。所以我的问题是,;不必硬编码一堆“特殊情况”单词(或整个字典!),将其翻译成代码的好方法是什么 我在C#工作就是为了这个。我更愿意编写代码,而不是使用外部库

好吧,这是个棘手的问题。我想做一个函数,它接受一个输入字符串,并返回一个语法正确的附录

示例(输入->所需输出):

  • 苹果->苹果
  • 汽车->汽车
  • 荣誉->荣誉
起初,我心不在焉地写了一个足够简单的函数来检查单词开头的元音,并根据它返回一个附录。。。但后来我被提醒,这不是唯一一次返回“an”而不是“a”,而且它实际上是基于输入单词开头的声音。所以我的问题是,;不必硬编码一堆“特殊情况”单词(或整个字典!),将其翻译成代码的好方法是什么

我在C#工作就是为了这个。我更愿意编写代码,而不是使用外部库,前提是它不会占用大量时间。依赖越少越好

编辑1

初始代码:

public static string ChooseAppendix(string inputString,bool includeInputString=true,bool capitalize appendix=false)
{
if(string.IsNullOrEmpty(inputString))
抛出新异常(“无法为空字符串选择附录!”);
char c=inputString.ToLower()[0];
如果(c='a'| c='e'| c='i'| c='o'| c='u')
{
如果(包括输入字符串)
返回大写的附录?$“An{inputString}”:$“An{inputString}”;
其他的
返回大写的附录“An”:“An”;
}
其他的
{
如果(包括输入字符串)
返回大写的附录?$“A{inputString}”:$“A{inputString}”;
其他的
返回附录?“A”:“A”;
}
}

目前,我已经决定使用(多亏了我在问这个问题(!)时在建议中没有出现的一个相关问题的答案):

我仍然将其包装在自己的函数中,只是为了使事情更易于控制:

public static string ChooseAppendix(字符串输入,bool includeInput=true,bool capitalizeAppendix=true)
{
字符串a_或_an=AvsAn.Query(input).Article;
返回$“{(大写附录?a_或a_an.ToUpper():a_或a_an.ToLower())}{(includeInput?$“{input}”:string.Empty)}”;
}

请分享您迄今为止的尝试。而且,正如你所知道的,为了荣誉,它应该是一种荣誉,而不是一种荣誉。H不是元音。@t太平洋
an
是正确的。“h”在
荣誉中是无声的,大声说“a荣誉”-这是不正确的(请参阅)。到目前为止,代码只是将字符串小写(以减少处理所需的代码量),提取第一个字符,然后将其与5个元音中的每一个进行比较。如果它与元音匹配,则返回
$“an{inputString}”
,否则返回
$“a{inputString}”
。一位酒店厨师说,诚实的选择是使用草药。除非英国女王会说是药草。你需要列出一长串的违规行为,然后根据一般规则,如果不符合你使用的地区(这也是一个重要因素),那就欢呼吧,天不下雨了;不需要伞确实是一种乌托邦….(不符合CLS,但)如果您使用方法重载/扩展来携带“includeInput”和“capitalizeAppendix”,事情可能会变得更整洁一些-例如,使用包含且较低/较高的普通方法
an()/an()
,类似地,不包括的扩展可以有字符串,比如
$“IT IS{AN(thing)}”
$“IT IS{thing.AN()}{thing}”
,而不是
$”它是{ChooseAppendix(thing,includeInput:false,capitaleAppendix:false}{thing}”
。我还感到震惊的是,“Appendix”似乎不是一个好词(这是一篇文章,不是附录)