解决导致错误的参数的最佳方法C#

时间:2018-04-24 20:43:37

标签: c# .net debugging error-handling parameters

当我尝试调用以下过程时出现错误:

ApplyVoucherNumberToBillingCharges(practiceID,
                                  Convert.ToInt32(rdoVoucherNumberAppliesTo.SelectedValue), 
                                  VoucherNumber, 
                                  VoucherNumberID,
                                  Convert.ToInt32(hdRoundingRecordId.Value),
                                  ChargeID,
                                  hdGenerateVoucherNumberChargeList.Value,
                                  Convert.ToDateTime(txtFromDate.Text),
                                  Convert.ToDateTime(txtToDate.Text),
                                  Convert.ToDateTime(txtPostingDate.Text),
                                  Convert.ToInt32(ddlVisitType.SelectedValue),
                                  SelectVisitProvider.SelectedID,
                                  SelectVisitLocation.SelectedID,
                                  chkOverwriteVoucherNumber.Checked);

我收到以下错误:

  

输入字符串的格式不正确c#

我知道这与convert类有关,因为我之前调用不同的方法时遇到了同样的错误。区别在于只有一个参数使用Convert类,现在有几个参数。

错误消息并不像我想的那样具有描述性,也没有提供很多关于特定情况发生的线索。

除了为执行此操作的每个参数进行注释和硬编码以及查看哪个参数导致问题之外,还有更好的方法来确定问题是什么吗?

我真的很想知道,因为我的项目有时需要花费几分钟时间(我知道,这很荒谬,我已经尝试了一切来解决这个问题,但没有任何作用)所以调试这个小问题可能需要永远。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:5)

您发布的代码段是相当于连续句子的编码。您在一行代码中执行的操作太多了。这使您的代码难以阅读,而且 - 正如您所发现的那样 - 难以调试。

作为起点,将Convert调用的结果分配给变量,然后将这些调用传递给方法:

var convertedVoucherNumberAppliesTo = Convert.ToInt32(rdoVoucherNumberAppliesTo.SelectedValue);
//other conversions here
ApplyVoucherNumberToBillingCharges(practiceId, convertedVoucherNumberAppliesTo, \\ pass in other variables here...);

通过这种方式,您可以快速识别哪个转换失败,因为每个潜在错误都会出现在特定行上。

至于您的项目需要几分钟才能构建,具体取决于项目规模,这可能是正常的。例如,我正在写这个答案,等待20分钟的构建&我们的CI服务器上的测试会话完成 - 构建占用了一半的时间。