1

ProductWeb サービスからオブジェクトを取得するコードがあります。製品がない場合は、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
}
4

3 に答える 3

10

try/catch スコープの外で宣言するだけです。

Product product;
try
{
    product = catalogContext.GetProduct("CatalogName", "ProductId");
}
catch (EntityDoesNotExist e)
{
    product = null;
}

if (dataGridView1.InvokeRequired)
{
    // use product here
}
于 2013-10-08T20:38:26.857 に答える
2

製品をフェッチするときに例外がスローされた場合は、対応する製品がありません。例外をスローしなかった場合にのみ、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
}
于 2013-10-08T20:47:04.520 に答える
0

この作業を行う唯一の方法は、try/catch 内に他の関連コードを含めることですか?

いいえEntityDoesNotExist。Web サービスが を返さない場合は例外がスローされますが、try ブロックの外側にある関連コードがアクセスできるように、try ブロックの外側でProductローカル変数を宣言する必要があります。Product

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
}
于 2013-10-08T20:38:01.240 に答える