使用int调用函数时出错?作为输入

时间:2014-02-01 17:18:18

标签: c#

我有这样的功能:

 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

3 个答案:

答案 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?而非Stringint.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;