我有这样的功能:
public int? calculateContractPrice(int? comid)
{
int? sum = 0;
var q = from i in dbconnect.tblMaterialGroups
where i.tenderId == _tenderId
select i.id;
foreach (int i in q )
{
var q2 = from g in dbconnect.tblMaterialTenderAnnouncePrices
where g.MaterialGroupId == i && g.companyId == comid
select g;
sum = q2.First().amount*q2.First().price + q2.First().amount*q2.First().PriceForElse + sum;
}
return sum+(from i in dbconnect.tblContracts where i.tender==_tenderId select i.tax).First();
}
所以当我调用这个函数时:
int coid = Convert.ToInt32(gvcompanyInTender.CurrentRow.Cells[0].Value.ToString());
objco.Tax =int.Parse((objco.calculateContractPrice(coid)) * (6 / 100));
我收到了这个错误: 我认为问题是因为int?我定义的,但我不知道如何解决这个问题。
Error 19 The best overloaded method match for 'int.Parse(string)' has some invalid arguments
答案 0 :(得分:0)
(objco.calculateContractPrice(coid)) * (6 / 100)
的结果是int?
值,而不是string
,因此您无法在其上调用int.Parse
,也没有理由。< / p>
另一个问题是,如果0
的结果为非空,则计算结果为calculateContractPrice
,因为6 / 100
在整数除法下等于0
理想情况下,您应该在使用之前检查该值是否为null,因为它是int?
:
int? contrPrice = objco.calculateContractPrice(coid);
if(contrPrice == null)
{
// error handling
}
else
{
objco.Tax = (int)(contrPrice * (6D / 100));
}
答案 1 :(得分:0)
int.Parse
接受string
作为参数,您需要更改:
objco.Tax =int.Parse((objco.calculateContractPrice(coid)) * (6 / 100));
为:
objco.Tax =int.Parse(((objco.calculateContractPrice(coid)) * (6 / 100)).ToString());
答案 2 :(得分:0)
错误归结为此表达式
(objco.calculateContractPrice(coid)) * (6 / 100)
此操作的类型为int?
而非String
。 int.Parse
方法需要String
,因此当您为其提供int?
时会出现错误。
要将int?
转换为int
值,您需要使用Value
或为null
的情况选择适当的默认值。当值为Value
时,null
属性将抛出,因此我建议使用??
并选择适当的默认值
objco.Tax = ((objco.calculateContractPrice(coid)) * (6 / 100)).Value;
// Or
objco.Tax = ((objco.calculateContractPrice(coid)) * (6 / 100)) ?? 0;