Это немного сложная задача для меня на данный момент, поэтому я подумал, что лучше спросить совета, прежде чем приступить к возможному решению.
У меня есть метод для HTML создания таблицы из list:
public static string CreateHTMLTable<T>(IEnumerable<T> list, params Func<T, (object, string)>[] fxns)
{
var sb = new StringBuilder();
sb.Append("<table>\n");
sb.Append("<thead>\n");
sb.Append("<tr>\n");
foreach (var fxn in fxns)
sb.Append("<th>").Append(fxn(default).Item2).AppendLine("</th>");
sb.Append("</tr>\n");
sb.Append("</thead>\n");
foreach (var item in list)
{
sb.Append("<tr>\n");
foreach (var fxn in fxns)
{
sb.Append("<td>");
sb.Append(fxn(item).Item1);
sb.Append("</td>");
}
sb.Append("\n</tr>\n");
}
sb.Append("</table>");
return sb.ToString();
}
В качестве вывода я получаю таблицу формата string = HTML. В этой таблице некоторые слова дублируются.
var Table = CreateHTMLTable(duplicate,
x => (x?.ContactPerson, "Title"),
x => (x?.Company, "Company")
);
Например:
<tr>
<td>John Smith</td><td></td>
</tr>
<tr>
<td>John Smith</td><td></td>
</tr>
<tr>
<td>Donald Duck</td><td>Microsoft</td>
</tr>
<tr>
<td>Donald Duck</td><td>Microsoft</td>
</tr>
Я хочу выделить пары = дубликаты. Таким образом, вывод будет примерно таким:
<tr>
<td bgcolor="green">John Smith</td><td></td>
</tr>
<tr>
<td bgcolor="green">John Smith</td><td></td>
</tr>
<tr>
<td bgcolor="red">Donald Duck</td><td>Microsoft</td>
</tr>
<tr>
<td bgcolor="red">Donald Duck</td><td>Microsoft</td>
</tr>
Думаю, мне следует создать другой метод для этой цели с генератором цвета:
public static string HighLightDuplicates(string HTMLTable)
{
var random = new Random();
var color = string.Format("#{0:X6}", random.Next(0x1000000));
string myStrings = HTMLTable;
if (myStrings.Distinct().Count() != myStrings.Count())
{
var string2 = myStrings.Replace("<td>", string.Format("%<td bgcolor=\"{0}\">%", color));
}
return myStrings;
}
Однако приведенный выше код не добавляет цвет в таблицу .
string EmailTable = HighLightDuplicates(Table);