1

我是 C# 新手,并试图让这段代码工作,但没有成功。它在 vb 中工作,但由于某种原因在 C# 中我收到此错误:参数 1:无法从对象转换为字符串,匹配的最佳重载方法有一些无效参数。任何帮助都会非常有帮助。

这是我的代码

VB

If sqlObj.sel_all_airlines(row("COMPANY")).tables(0).rows.count > 1 Then
end if 

C#

if (sqlObj.sel_all_airlines(row["COMPANY"]).Tables[0].Rows.Count > 1){}
4

6 回答 6

6

尝试这个:

if (sqlObj.sel_all_airlines(row["COMPANY"] as string).Tables[0].Rows.Count > 1){
}
于 2013-06-10T12:28:52.357 回答
1

你可能已经在你的 VB.Net 中打开了隐式类型转换功能,所以更接近它正在做的事情是:

if (sqlObj.sel_all_airlines(row["COMPANY"].ToString()).Tables[0].Rows.Count > 1){
}
于 2013-06-10T12:29:06.000 回答
1

试试上面的

if (sqlObj.sel_all_airlines(row["COMPANY"].Tostring()).Tables[0].Rows.Count > 1){
   }
于 2013-06-10T12:29:14.193 回答
1

尝试显式转换为String

if (sqlObj.sel_all_airlines((String)row["COMPANY"]).Tables[0].Rows.Count > 1){
}
于 2013-06-10T12:29:30.027 回答
1
if (sqlObj.sel_all_airlines((string)row["COMPANY"]).Tables[0].Rows.Count > 1)
于 2013-06-10T12:30:12.830 回答
0

我假设该方法If sqlObj.sel_all_airlines返回一个DataSet. 然后你想检查第一个表中是否至少有一行(旁注:返回 a 可能更合适DataTable)。

如果您在两者之间使用变量,通常更容易理解、维护或扩展(或仅转换为 C#),例如:

VB.NET

Dim companyTable As DataTable = sqlObj.sel_all_airlines(row("COMPANY")).Tables(0)
If companyTable.Rows.Count > 1 Then
' ...

C#

DataTable companyTable = sqlObj.sel_all_airlines(row["COMPANY"]).Tables[0];
if(companyTable.Rows.Count > 1)
{
    // ...

您还应该在项目的编译器设置中将Option Strictand设置为 ON。Option Explicit然后你必须修复几个编译器错误和警告。但它是值得的,因为它提供了强类型,防止意外的类型转换导致数据丢失,不允许后期绑定,并提高了性能,强烈推荐使用它。

之后的代码也更像 C#(除了语法)。

于 2013-06-10T12:34:29.970 回答