单声道c#。DataRow:“数据行”;“字段”;缺少扩展方法?

单声道c#。DataRow:“数据行”;“字段”;缺少扩展方法?,c#,mono,datarow,C#,Mono,Datarow,在Windows(.NET Framework 3和3.5)中编程C#时,我经常使用DataRow对象(或DataRowCollection)。 现在,我想在Linux中使用mono开发的C#程序中使用它。 我的问题是:我在使用mono时找不到DataRow的“Field”扩展方法。。。有人能帮我吗 提前谢谢 (示例:返回ds.Table[0]。行[0]。字段(0))噢,天哪 您确实应该使用名称作为数据集合的索引键:ds.Table[“Table Name”]。Rows[rowIndex][“C

在Windows(.NET Framework 3和3.5)中编程C#时,我经常使用DataRow对象(或DataRowCollection)。 现在,我想在Linux中使用mono开发的C#程序中使用它。 我的问题是:我在使用mono时找不到DataRow的“Field”扩展方法。。。有人能帮我吗

提前谢谢

(示例:
返回ds.Table[0]。行[0]。字段(0)

噢,天哪

您确实应该使用名称作为数据集合的索引键:ds.Table[“Table Name”]。Rows[rowIndex][“Column Name”]

更具可读性和可维护性

编辑: VB字段扩展方法:

<Extension>
Public Function Field(ByRef tRow As DataRow, ByVal tColumnName As String) As Object
    Return tRow(tColumnName)
End Function

作为对象的公共函数字段(ByRef tRow作为DataRow,ByVal tColumnName作为String)
返回tRow(tColumnName)
端函数

通过查看,字段在System.Data.DataSetExtensions中定义。我不确定它是否在Mono中可用,但请尝试为此命名空间添加一个“using”语句。如果找不到名称空间,可能需要在项目中添加引用。

所引用的扩展方法在System.Data.DataSetExtensions.dll中定义。如果该程序集是Mono发行版的一部分,则应该添加对它的引用。如果不是,您可以尝试从MS.NET安装中复制它,看看它是否有效。

这与
GetInt32(0)
有什么不同?

谢谢,但这只是一个愚蠢的例子来解释我的问题;)我找不到mono的任何“Field”扩展方法。那就做一个吧?如果使用Table.Rows[rowIndex][columnIndex或Key],则不需要它。但是没有什么能阻止你创建你自己的,正如我在上面的编辑中所展示的,这并不是远程完成MS扩展方法所做的一切。它不处理空值,也不将值强制转换为正确的返回类型。事实上,MS版本会检查您请求的返回类型是否为System.Nullable,并生成和缓存一个优化的转换函数,该函数可以正确处理DBNull和reference vs value返回类型。从mono邮件列表(谢谢Gillespie先生,我现在可以做一个通用版本;):根据此字段是一个扩展方法。您必须确保有对System.Core的引用才能使用扩展方法。另外,从帮助文档中还不清楚,如果扩展方法位于未解析的命名空间中,通常必须有一个“using Blah.Extensions;”子句。但是“你自己写,这里有一个例子,它不做你要求的任何事情”可以作为这个网站上任何问题的答案发布,对任何问题都没有帮助。因为如果你的列包含null,Field方法允许你做
row.Field(0)
并在数据行中的基础值实际上是
DBNull.value
时返回一个不带值的可空int。这比每次检查DBNull或处理异常要好得多。此外,DataRow没有GetInt32方法。我想你可能会想到一个DataReader.Arg,我确信我记得DataRow实现了IDataRecord,但是在闭包检查时,文档会说另外一个:(我想这太有意义了。