首页 > 解决方案 > 排除参数导致错误 C# 的最佳方法

问题描述

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

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 类的参数只有一个,而现在有几个。

错误消息不像我想要的那样具有描述性,并且没有提供很多线索,特别是在哪里发生这种情况。

除了注释掉和硬编码执行此操作的每个参数的值并查看导致问题的参数之外,是否有更好的方法来确定问题所在?

我真的很想知道,因为我的项目有时需要几分钟才能构建(我知道,这很荒谬,我已经尝试了一切来解决这个问题,但没有任何效果),因此调试这个小问题可能需要很长时间。

感谢您的任何帮助,您可以提供。

标签: c#.netdebuggingerror-handlingparameters

解决方案


您发布的代码片段是一个连续句子的编码等价物。您在一行代码中执行了太多的操作。这使您的代码难以阅读,并且 - 正如您所发现的 - 难以调试。

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

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

通过这种方式,您将能够快速确定哪个转换失败,因为每个潜在错误都在特定的行上。

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


推荐阅读