如果声明更好,我该如何做呢?

我是C#的新手,我有一个问题。我在Google上找不到正确的答案,但是如何简化或清理此代码。

    if (availabletables.Any(item => item.Name == "Table1") == false)
    {
        ViewBag.Table1FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table2") == false)
    {
        ViewBag.Table2FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table3") == false)
    {
        ViewBag.Table3FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table4") == false)
    {
        ViewBag.Table4FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table5") == false)
    {
        ViewBag.Table5FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table6") == false)
    {
        ViewBag.Table6FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table7") == false)
    {
        ViewBag.Table7FillColor = "#ff1200";
    }
    if (availabletables.Any(item => item.Name == "Table8") == false)
    {
        ViewBag.Table8FillColor = "#ff1200";
    }
tmroybq 回答:如果声明更好,我该如何做呢?

在ViewData中设置值实际上与ViewBag中的动态属性相同(请参见this answer)。这样可以使用数组提供一个不错的解决方案:

string[] tableNames = new string[]{"Table1","Table2",...};
string[] tableColorProperties = new string[]{"Table1FillColor","Table2FillColor",...};

for(int i=0; i<tableNames.Length; i++)
{
    if (availableTables.Any(item => item.Name == tableNames[i]) == false)
    {
        ViewData.Add(tableColorProperties[i],"#ff1200");
    }
}

根据个人喜好可以进一步改善:使用字典而不是两个数组LINQ,等等。

我不得不说,尽管您可能应该考虑重构传递给控制器​​的数据以使用强类型模型。

,

如果有任何可以存在任意数量表的表,则可以与Regex匹配并相应地添加它们:

var names = new List<string>
{
    "Table1","SomeRandomName","Table8907123","Table123NoMatch"
};

var regex = new Regex(@"^Table[1-9]\d*$");

var matches = names.Select(s => regex.Match(s)).Where(match => match.Success);
foreach (var match in matches)
    ViewData.Add($"{match.Value}FillColor","#ff1200");

如果只想将“ Table1”与“ Table8”进行匹配,则可以改用Regex

var regex = new Regex(@"^Table[1-8]$");
本文链接:https://www.f2er.com/3122918.html

大家都在问