我有一个从Web服务获取Product
对象的代码。如果没有产品,则返回EntityDoesNotExist
例外。我需要处理这个..但是,我有很多其他代码处理返回的Product
,但如果此代码不在try / catch中,则它不起作用,因为Product
基本上没有定义。是否唯一的方法是将其他相关代码包含在try / catch中?这看起来真的很草率。
代码示例:
try {
Product product = catalogContext.GetProduct("CatalogName", "ProductId");
} catch(EntityDoesNotExist e) {
// Do something here
}
if(dataGridView1.InvokeRequired) {
// Do something in another thread with product
}
答案 0 :(得分:8)
只需在try / catch范围之外声明它。
Product product;
try
{
product = catalogContext.GetProduct("CatalogName", "ProductId");
}
catch (EntityDoesNotExist e)
{
product = null;
}
if (dataGridView1.InvokeRequired)
{
// use product here
}
答案 1 :(得分:1)
如果在提取产品时抛出了异常,那么您就没有产品可以采取行动。您似乎应确保只在未抛出异常时才执行UI代码。这可以通过将代码移到 try
块中来完成:
try
{
Product product = catalogContext.GetProduct("CatalogName", "ProductId");
if (dataGridView1.InvokeRequired)
{
// Do something in another thread with product
}
}
catch (EntityDoesNotExist e)
{
// Do something here
}
答案 2 :(得分:0)
使这项工作的唯一方法是包含我的其他相关代码 在try / catch中?
没有。即使在webservice没有返回EntityDoesNotExist
时抛出Product
异常,您也需要在try块之外声明本地Product
变量,以便在try之外的相关代码块可以访问它。
在product
:
try{}catch{}
Product product = null;
try
{
product = catalogContext.GetProduct("CatalogName", "ProductId");
}
catch(EntityDoesNotExist e)
{
// Do something here
}
if(dataGridView1.InvokeRequired)
{
// Do something in another thread with product
}