在我的应用程序中,我不明白如何处理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;
}
在这里,尝试并捕获块,所有节点都采用int值,但是,因为_fees取“0”值。它显示了格式异常。我只是希望我的节点不显示空字符串。我想处理这个异常。这意味着,它不应该在“this._fees = Convert.ToInt32(getXmlNode(”fees“,node))”行中抛出异常;“因为它返回了我想要的int值。
我怎么能实现这个目标?
答案 0 :(得分:5)
您通常可以使用TryX
方法avoid control-flow programming try/catch机制;在您的情况下,int.TryParse
,以便:
int output;
if (int.TryParse(input, out output)) {
// success
} else {
// failure
}
答案 1 :(得分:0)
你还没有发布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();
}