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#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;
}
根据要设置的属性数量,您还可以在函数签名中进行其他操作或使用可选参数。