我有一个网格,我通过它的名称访问每个唯一的列,如下所示:
grid.Columns["SomeColumnA"]
但是,我只能设置该列的属性,如果它不是这样的那样:
if (grid.Columns["SomeColumnB"] != null) {
grid.Columns["SomeColumnB"].Width = 100;
}
我有大约15/20个不同的列需要为各种事物设置,但它们都需要首先检查为null。它看起来有点乱,因为它是15/20 if
语句。我想知道这些if
语句是否是最好的方法,或者我是否可以实现其他方法来简化它并整理代码。有什么想法/建议吗?
答案 0 :(得分:5)
如果您使用C#6.0,则可以使用null propagation operator.所以
if (grid.Columns["SomeColumnB"] != null) {
grid.Columns["SomeColumnB"].Width = 100;
}
变为
grid.Columns["SomeColumnB"]?.Width = 100;
更干净。
答案 1 :(得分:4)
我不明白为什么这些网格列可以为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;
}
}
答案 2 :(得分:2)
你可以像这样使用所有列的循环
foreach(var column in grid.Columns)
{
//do something to the column
}
答案 3 :(得分:0)
为什么没有设置控件属性的函数?
void SetProperty(Control ctrl,int value,string columnName)
{
if(ctrl!=null) ctrl.Columns[columnName].Width=value;
}
您还可以在函数签名中进行其他操作或使用可选参数,具体取决于您要设置的属性数。