1

ここでの最初の質問です。私は英語があまり得意ではありません。ご容赦ください。

ユーザーが「ドライバー」とやり取りするスクリプトを作成できるようにするアプリケーションを作成しています。スクリプトとドライバーはすべて別個のクラス ライブラリ dll です。これらのクラスは、渡されるコールバック デリゲートを介して通信するため、コンパイル時にはリンクされません。

例: (スクリプト)-->(通信を処理するプログラム)-->(ドライバ)

今私の質問は:

スクリプトがデリゲートを介してメソッドを実行し、例外をスローすると、例外はスクリプトにバブルアップされ、try-catch ブロックでキャッチされた場合、ユーザーはそれを処理できます。そうでない場合は、例外をキャッチする必要があります。私のプログラム内。

このようにうまく動作しますが、これが正しい方法かどうかはわかりません:

delegate object ScriptCallbackDelegate(string InstanceName, string MethodName, object[] Parameters);

static private object ScriptCallbackMethod(string InstanceName, string MethodName, object[] Parameters)
{
    try
    {
         return InterfaceWithDriver(InstanceName, MethodName, Parameters);
    }
    catch( Exception e )
    {
         try
         {
             throw;
         }
         catch
         {
             Console.WriteLine("Script did not handle exception: " + e.Message);
             return null;
         }
    }

}
4

2 に答える 2

3
catch (Exception e)
{
    try
    {
        throw;
    }
    catch
    {
        Console.WriteLine("Script did not handle exception: " + e.Message);
        return null;
    }
}

意味的には次のものと同じです:

catch (Exception e)
{
    Console.WriteLine("Script did not handle exception: " + e.Message);
    return null;
}

スクリプトはその内部を認識していませんthrow。C# コードによってキャッチされています。

于 2013-04-26T06:55:47.833 に答える
1

コードで発生した例外は、コードから離れることはありません。たとえば、次の例では、同様の動作が見られます。

using System;

namespace Code.Without.IDE
{
    public static class TryCatch
    {
        public static void Main(string[] args)
        {
            try
            {
                try
                {
                    throw new Exception("Ex01");
                }
                catch(Exception ex)
                {
                    try
                    {
                        throw;
                    }
                    catch
                    {
                        Console.WriteLine("Exeption did not go anywhere");
                    }
                }
                Console.WriteLine("In try block");
            }
            catch
            {
                Console.WriteLine("In catch block");
            }
        }
    }
}

次の出力が生成されます。

------ C:\abhi\Code\CSharp\without IDE\TryCatch.exe

例外はどこにも行きませんでした

try ブロック内

------ プロセスが 0 を返しました

于 2013-04-26T07:03:47.740 に答える