c#切换类型多案例最佳实践

本文关键字:最佳 案例 类型 | 更新日期: 2023-09-27 18:29:29

我有一个网格,我通过它的名称访问每个唯一的列,如下所示:

grid.Columns["SomeColumnA"]

然而,我只能设置该列的属性,如果它不是空的,就像这样:

if (grid.Columns["SomeColumnB"] != null) {
    grid.Columns["SomeColumnB"].Width = 100;
}

我有大约15/20个不同的列,需要为各种事情设置,但它们都需要首先检查是否为null。它看起来有点混乱,因为它是15/20 if语句。我想知道这些if语句是否是最好的方法,或者我是否可以实现其他东西来简化它并整理代码。有什么想法/建议吗?

c#切换类型多案例最佳实践

如果使用C#6.0,则可以使用null传播运算符。所以

if (grid.Columns["SomeColumnB"] != null) {
    grid.Columns["SomeColumnB"].Width = 100;
}

成为

grid.Columns["SomeColumnB"]?.Width = 100;

干净多了。

我根本不明白为什么那些网格列可以为null。然而,也许您可以将列名存储在一个单独的集合中,并使用如下代码:

string[] columns = { "SomeColumnA", "SomeColumnB", "SomeColumnC" };
var gridColumns = columns.Select(c => grid.Columns[c]).Where(c => c != null);
foreach (var col in gridColumns)
{
    // you could use a switch if you need to set different things according to the Name
    switch (col.Name)
    {
        case "SomeColumnA": col.Width = 100; break;
        case "SomeColumnB": col.Width = 120; break;
        case "SomeColumnC": col.Width = 150; break;
        default: break;
    }
}

您可以使用循环遍历所有列,如以下

foreach(var column in grid.Columns)
{
    //do something to the column
}

为什么没有一个函数来设置控件的属性?

void SetProperty(Control ctrl,int value,string columnName)
{
    if(ctrl!=null) ctrl.Columns[columnName].Width=value; 
}

根据要设置的属性数量,您还可以在函数签名中进行其他操作或使用可选参数。