比较C#中不同大小的List

时间:2016-10-19 17:32:37

标签: c# asp.net

您好我在C#.NET中有一个应用程序可以提交摘要。这将是一个段落。

现在,如果我从我的结尾对该摘要进行了任何更改,它应该使用原始摘要和修改后的摘要将该电子邮件发送给该人。在修改部分中,它应突出显示已完成的更改。

我为此编写了一个函数:

   public string[] compareText(string submittedValue,string updatedValue) 
    {
        #region COMPARETEXT

        List<string> oldAbstract = submittedValue.Split('.').ToList<string>();
        List<string> newAbstract = updatedValue.Split('.').ToList<string>();
        string resultOldAbstract = "";
        string resultNewAbstract = "";
        for (var i = 0; i < (oldAbstract.Count - 1); i++)
        {
            if (String.Equals(oldAbstract[i], newAbstract[i], StringComparison.Ordinal))
            {

                resultOldAbstract += oldAbstract[i].ToString() + ".";

                resultNewAbstract += newAbstract[i].ToString() + ".";
            }

            else
            {

                List<string> oldAbstract1 = oldAbstract[i].Split(' ').ToList<string>();
                List<string> newAbstract1 = newAbstract[i].Split(' ').ToList<string>();
                if (oldAbstract1.Count == newAbstract1.Count)
                {
                    for (var j = 0; j < (oldAbstract1.Count); j++)
                    {
                        if (String.Equals(oldAbstract1[j], newAbstract1[j], StringComparison.Ordinal))
                        {
                            if (j < (oldAbstract1.Count - 1))
                            {
                                resultOldAbstract += oldAbstract1[j].ToString() + " ";

                                resultNewAbstract += newAbstract1[j].ToString() + " ";
                            }
                            else
                            {
                                resultOldAbstract += oldAbstract1[j].ToString() + ".";

                                resultNewAbstract += newAbstract1[j].ToString() + ".";
                            }
                        }

                        else
                        {
                            if (j < (oldAbstract1.Count - 1))
                            {
                                resultOldAbstract += oldAbstract1[j].ToString() + " ";
                                resultNewAbstract += "<span style='background:yellow'>" + newAbstract1[j].ToString() + "</span> ";
                            }
                            else
                            {
                                resultOldAbstract += oldAbstract1[j].ToString() + ".";
                                resultNewAbstract += "<span style='background:yellow'>" + newAbstract1[j].ToString() + "</span>.";
                            }
                        }
                    }
                }
                else
                {
                    resultOldAbstract += oldAbstract[i].ToString() + ".";
                    resultNewAbstract += "<span style='background:yellow'>" + newAbstract[i].ToString() + "</span>.";
                }

            }

        }

        //return resultOldAbstract,resultNewAbstract;
        return new[] {resultOldAbstract,resultNewAbstract};

        #endregion
    }

但它仅在两个列表的大小相同时才有效。例如,

****Submitted abstract****

   hi This is John. i am 26 year old. I live in New York.


****Updated abstract****
  Hi This is John. I am 26 year old. I live in washington.

当我做这些更改时,它工作正常。它突出显示在 hi i 纽约所做的更改。

这里提交的列表和更新后的列表都有相同数量的元素(这里是3,bcz我在fullstop分裂'。')。但是假设在我的更新摘要中我添加了一个新行或删除了一行:

****Updated abstract****
  Hi This is John. I am 26 year old. I live in washington. I am a software engineer.

       or

****Updated abstract****
  Hi This is John. I am 26 year old.

然后它不起作用,因为列表的大小不同,并且在for循环中它会抛出索引错误。

有什么想法吗?

0 个答案:

没有答案