操作员在不能应用'object'和& # 39;int # 39;
本文关键字:int 不能 应用 object 操作员 | 更新日期: 2023-09-27 18:06:08
int i_cnt;
int i_row;
i_cnt = 0;
i_row = 0;
foreach (DataRow dr_ledger in ds_main.Tables["PandL_New"].Rows) {
if (((dr_ledger[4] == "SALES ACCOUNTS")
|| ((dr_ledger[4] == "PURCHASE ACCOUNTS")
|| ((dr_ledger[4] == "OPENING STOCK")
|| (dr_ledger[4] == "CLOSING STOCK"))))) {
i_sum = (i_sum++(dr_ledger[(11) + (12)]));
}
if ((dr_ledger[4] == "PROFIT & LOSS A/C")) {
i_row = i_cnt;
}
i_cnt = (i_cnt + 1);
}
if ((i_sum == 0)) {
if ((ds_main.Tables["PandL_New"].Rows[i_row][11] + (ds_main.Tables["PandL_New"].Rows[i_row][12] > 0))) {
ds_main.Tables["PandL_New"].Rows[i_row][4] = "EXCESS of INCOME OVER EXPENDITURE";
}
else {
ds_main.Tables["PandL_New"].Rows[i_row][4] = "EXCESS OF EXPENDITURE OVER INCOME";
}
}
这是出现的两个错误,不允许我编译:
1号线;(i_sum + + (dr_ledger [(11) + (12)]));
第2行;(ds_main.Tables["PandL_New"。行[i_row][12]比;
0)))1)。方法名称
2)。操作符'>'不能应用于'object'和'int'类型的操作数
最初是在VB中实现的。代码如下:
For Each dr_ledger In ds_main.Tables("PandL").Rows
If
dr_ledger.Item(2).tolower = "SALES ACCOUNTS".ToLower Or
dr_ledger.Item(2).tolower = "PURCHASE ACCOUNTS".ToLower Or
dr_ledger.Item(2).tolower = "OPENING STOCK".ToLower Or
dr_ledger.Item(2).tolower = "CLOSING STOCK".ToLower
Then
i_sum = i_sum + dr_ledger.Item(7)
End If
If dr_ledger.Item(2).tolower = "PROFIT & LOSS A/C".ToLower
Then
i_row = i_cnt
End
If i_cnt = i_cnt + 1
//...
实际上,从将此代码转换为c#....
据我所知:
i_sum = (i_sum+(dr_ledger[(11) + (12)]));
…
Convert.ToInt32(ds_main.Tables["PandL_New"].Rows[i_row][12]) > 0
要在c#中应用>
和<
操作符,您要应用它们的对象必须实现IComparable Interface (https://msdn.microsoft.com/en-us/library/system.icomparable(v=vs.110).aspx)。
默认object
不实现此接口,因此不能应用<
/>
操作符。根据对象的类型,可以将其强制转换为IComparable,然后应用<
或>
操作符。
public bool Compare(object a, object b)
{
var compA = (IComparable)a;
var compB = (IComparable)b;
return compA > compB;
}
但是,如果a或b是不实现IComparable类型的对象,这将不起作用(并抛出异常)。
用你的代码,我猜ds_main.Tables["PandL_New"].Rows[i_row][12]
的值返回一个DataRow.Item
(https://msdn.microsoft.com/en-us/library/kwfe1t7z(v=vs.110).aspx),这是一个项目,不一定要实现icomable接口。如果您尝试将其强制转换为IComparable,那么应用>
操作符应该可以工作:
((IComparable) ds_main.Tables["PandL_New"].Rows[i_row][12]) > 0
对于第一期,您期望(i_sum++(dr_ledger[(11) + (12)]));
做什么?int类型的++
操作符将迭代它(与说i = i + 1
相同),并且不接受任何参数。
编辑:考虑到现在提供的VB,行:
i_sum = (i_sum++(dr_ledger[(11) + (12)]));
应替换为:
i_sum = i_sum + ((int) dr_ledger[7]);
----------原始答案
如果要将dr_ledger[(11) + (12)]
的值添加到i_sum
,则需要使用+=
或+
运算符:
i_sum+=(dr_ledger[(11) + (12)]);
// or
i_sum = i_sum + (dr_ledger[(11) + (12)]);
然而,这里dr_ledger[(11) + (12)]
将评估为dr_ledger[23]
,所以我不确定为什么你有(11)+ (12)?