【发布时间】:2018-05-08 12:42:44
【问题描述】:
我正在使用 .NET 4.6.1
我有一个属性,我可以使用它来获取和设置DataGridView 中每一列的宽度:
public int[] MyDataGridViewColWidth
{
get
{
return myDataGridView.Columns.Cast<DataGridViewColumn>().Select(c => c.Width).ToArray();
}
set
{
for (int pos = 0; pos < value.Length; pos++)
{
myDataGridView.Columns[pos].Width = value[pos];
}
}
}
如您所见,getter 使用 LINQ 表达式来检索数组中的所有列宽。
setter 中的反转是否也适用于 LINQ,还是我应该坚持原始 for 循环?
【问题讨论】:
-
循环中的原语是什么?每当你想修改多个东西时使用它。 LINQ 查询不应引起副作用。它应该只用于查询和返回一些东西。
-
LINQ 仅用于在内部编写小代码,一旦它编译完所有相同的东西。
-
我会坚持使用
for循环。认为您可能想在set中为null和比列数长的array添加一些检查。 -
@RICKYKUMAR:OP 正在询问 set 访问器。没有 LINQ 等价物可以编译成相同的东西。有一个很好的理由:LIN(Q) 查询源并且不修改它们。
-
是的,您可以在 setter 中使用 LINQ,但我会坚持使用您现在拥有的解决方案。如前所述,您可能需要添加一些错误检查。