手柄系统.格式异常C#

本文关键字:异常 格式 系统 | 更新日期: 2023-09-27 18:28:50

在我的应用程序中,我不知道如何处理system.format异常。参见以下代码

public Harvest_Project(XmlNode node)
    {
        this._node = node;
        this._name = node.SelectSingleNode("name").InnerText;
        this._created_at = storeTime(node.SelectSingleNode("created-at").InnerText);
        this._updated_at = storeTime(node.SelectSingleNode("updated-at").InnerText);
        this._over_budget_notified_at = storeTime(node.SelectSingleNode("over-budget-notified-at").InnerText);
        this._latest_record_at = storeTime(node.SelectSingleNode("hint-latest-record-at").InnerText);
        this._earliest_record_at = storeTime(node.SelectSingleNode("hint-earliest-record-at").InnerText);
        this._billable = bool.Parse(node.SelectSingleNode("billable").InnerText);
        try
        {
                this._id = Convert.ToInt32(node.SelectSingleNode("id").InnerText);
                this._client_id = Convert.ToInt32(node.SelectSingleNode("client-id").InnerText);
                this._budget = float.Parse(node.SelectSingleNode("budget").InnerText);
                this._fees = Convert.ToInt32(getXmlNode("fees", node));
        }
        catch (FormatException e)
        {
           Console.WriteLine();
        }
        catch (OverflowException e)
        {
            Console.WriteLine("The number cannot fit in an Int32.");
        }
        this._code = node.SelectSingleNode("code").InnerText;
        this._notes = node.SelectSingleNode("notes").InnerText;
    }

在try-and-catch块中,所有节点都取int值,但由于_fees取"0"值。它显示格式异常。我只是希望我的节点不显示空字符串。我想处理这个异常。这意味着,它不应该在"this._fees=Convert.ToInt32(getXmlNode("fees",node));"行引发异常,因为它正在返回我想要的int值。

我怎样才能做到这一点?

手柄系统.格式异常C#

通常使用TryX方法可以避免使用try/catch机制进行控制流编程;在您的情况下,int.TryParse,这样:

int output;
if (int.TryParse(input, out output)) {
  // success
} else {
  // failure
}

您还没有发布xml,我找不到getXmlNode函数
但我认为它返回的XmlNode的内容不是int(否则,您将使用InnerText属性.

试试这个:

XmlNode fees = getXmlNode(...)
var curr = fees.FirstChild;
int _fees = 0;
while (curr != null) {
    _fees += (Convert.ToInt32(curr.InnerText);
    curr = curr.NextSibling();
}