如何删除错误列表中已经存在的单词

How to remove a word that already exist in errorList

我有一个在单词中运行拼写检查的方法,但我在这里想要的是,如果该单词已经存在于我的错误列表中,则不应将其添加为错误。下面是我的代码。

public void CheckSpelling()
    {
        int lineno = 0;
        bool start = false;
        foreach (string line in _contentList)
        {
            lineno++;
            if (line.Contains("<text>"))
            {
                start = true;
            }
            if (start)
            {
                foreach (Match match in Regex.Matches(line, "<.*?>[^<]+</(.*?)>", RegexOptions.IgnoreCase))
                {
                    List<string> customdiclist = new List<string>(File.ReadAllLines(Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings["customdic"])));
                    string[] strArray = Regex.Replace(match.Value, "</?[^>]+>", string.Empty).Split(' ');
                    foreach (string word in strArray)
                    {
                        if ((word.Trim() != string.Empty) && ((word.Substring(0, 1) != word.Substring(0, 1).ToUpper()) && !_helper.CheckSpelling(Regex.Match(word, "[a-zA-Z]+").Value) && !customdiclist.Contains(word)))
                        {
                            ErrorModel errorModel = new ErrorModel()
                            {
                                LineNumber = lineno,
                                ErrorMessage = "Please Check Misspelled words",
                                Text = word
                            };
                            ErrorList.Add(errorModel);
                        }
                    }
                }
            }
        }
    }

_helper.CheckSpelling

class Helper
    {        
        private static readonly string DictPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings["dictionary"]);

        private readonly Hunspell _splCheck = new Hunspell(DictPath + @"\nl_NL.aff", DictPath + @"\nl_NL.dic");
        public bool CheckSpelling(string strWord)
        {
            if(!_splCheck.Spell(strWord.Trim()))
            {
                return false;
            }
            return true;
        }
    }

有人能帮忙吗,我不想在我的错误列表中有任何重复的词。

您可以使用 LINQ 检查您的 ErrorList 是否已经包含一个 ErrorModel 对象,该对象的 Text 属性 具有 word 的值您正在查看。

使用 FirstOrDefault 您可以检查它是否 returns 为空。如果在列表中找不到某个项目,将返回 null 作为默认值,因为您的列表是 class 个对象的集合(其默认值为 null)。

如果 FirstOrDefault returns null 那么 word 还没有被添加到 ErrorList.

有关详细信息,请参阅 When to use .First and when to use .FirstOrDefault with LINQ?

foreach (string word in strArray)
{
    if ((word.Trim() != string.Empty) && ((word.Substring(0, 1) != word.Substring(0, 1).ToUpper()) && !_helper.CheckSpelling(Regex.Match(word, "[a-zA-Z]+").Value) && !customdiclist.Contains(word)))
    {
        if (ErrorList.FirstOrDefault(e => e.Text == word) == null)
        {
            ErrorModel errorModel = new ErrorModel()
            {
                LineNumber = lineno,
                ErrorMessage = "Please Check Misspelled words",
                Text = word
            };
            ErrorList.Add(errorModel);
        }
    }
}