嵌套静态类中不允许使用扩展方法?

Svi*_*ish 9 c# extension-methods nested-class

为什么是这样?我觉得能够锁定一些扩展方法只能在我的一个类中使用它真的很棒.真的不想在任何地方都有某些扩展方法......而且它们看起来比常规静态方法好得多:P


为了澄清:

我想要这些扩展方法的原因是因为我正在扩展一个Form,它上面有一个DataGridView.而且我对这些行感到厌倦:

foreach(var row in grid.Rows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))

foreach(var row in grid.SelectedRows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))
Run Code Online (Sandbox Code Playgroud)

想要一个扩展方法,以便我可以做到

foreach(var row in grid.Rows.CheckedRows())

foreach(var row in grid.SelectedRows.CheckedRows())
Run Code Online (Sandbox Code Playgroud)

换句话说,这个扩展方法在这个类之外根本没用.但它会使代码更清洁.当然可以制定常规方法,这就是我最终做的事情,因为这是不可能的.

Aaanyways,我只是想知道是否有人有一些很好的论据,为什么他们选择在这里使用扩展方法创建这样的限制.必须在静态类中才有意义.不能在嵌套的静态类中不...至少对我来说......

Luk*_*keH 1

使用扩展方法真的会让您的代码比在类上使用标准帮助器方法更干净吗?

// extension method
foreach (var row in grid.Rows.CheckedRows())
foreach (var row in grid.SelectedRows.CheckedRows())

// standard helper method
foreach (var row in CheckedRows(grid.Rows))
foreach (var row in CheckedRows(grid.SelectedRows))
Run Code Online (Sandbox Code Playgroud)

  • @Svish(稍后):这不是(纯粹)主观的:非扩展系统组成很差,因为它会导致过度嵌套(即可读性差)。如果您愿意的话,扩展语法是 reader-tailcalls 的一种形式:-) (2认同)