C# 以 "a" 与 "an" 开头

C# Start with "a" vs "an"

我试图搜索此主题,但找不到任何结果。 我的问题是:有什么办法可以找出单词的前缀吗?无论是 "an" 还是 "a".

例如:

an apple
a house
an old house
an amazon
a vampire

所以我的输入只是单词,然后函数会 return 正确的前缀。

让我们假设任何以元音字母开头的单词都将以 "an" 开头,而所有其他单词将以 "a" 开头。

string getArticle(string forWord)
{
  var vowels = new List<char> { 'A', 'E', 'I', 'O', 'U' };

  var firstLetter = forWord[0];
  var firstLetterCapitalized = char.ToUpper(firstLetter);
  var beginsWithVowel = vowels.Contains(firstLetterCapitalized);

  if (beginsWithVowel)
    return "an";

  return "a";
}

是否可以简化和改进? 当然。但是,它应该作为起点。

存在可读性较差但较短的版本,例如:

string getArticle(string forWord) => (new List<char> { 'A', 'E', 'I', 'O', 'U' }).Contains(char.ToUpper(forWord[0])) ? "an" : "a";

但是,这两个都忽略了边缘情况,例如 forWord 为 null 或空。

评论中的链接给出了最全面的回复,但如果你想要一些非常简单的概念来理解,那就是这样的:

通过名词获得不定冠词(前缀):

    public static string prefix(string noun)
    {
        List<string> vowels = new List<string>(){ "A", "E", "I", "O", "U" };
        if (string.IsNullOrWhiteSpace(noun) || noun.Length < 2) return null;
        else return vowels.Contains(noun.Substring(0, 1).ToUpper()) ? "An" : "A";
    }