2016-06-20 21 views
-3

例外をキャッチして別のメソッドに渡すが、取得しているが、引数 '1'は 'ref'キーワードと一緒に渡さなければならないrefまたはout引数は、代入変数abc.AbendProgram(ref string、ref System.Exception)の最適オーバーロードメソッドが無効な引数を持っています。私が間違いを犯しているか分かりません。メソッドの引数が機能しない

private void OpenDatabases() 
{ 

    try 
    { 
      WinDSSS.connectionString = 
      ConfigurationManager.AppSettings["WinDSS_Connection"].Replace("%DrivePath%", DrivePath); 

    } 
    catch (Exception ex) 
    { 
      logger.AddEntry(TFSUtilities.Logger.EventType.Fatal, 
        "frmMain.OpenDatabases", "Exception", ref ex); 
      AbendProgram(ref "Open Database", ref ex); 
    } 

} 

private void AbendProgram(ref string theRoutine, ref Exception theException) 
{ 
    int errorNumber = -1; 
    string ErrorDesc = "Unknown Error"; 
    if ((theException != null)) 
    { 
      errorNumber = 9999; 
      ErrorDesc = theException.ToString(); 
      if ((theException.InnerException != null)) 
      { 
       ErrorDesc = ErrorDesc + Constants.vbCrLf + 
          theException.InnerException.Message; 
      } 
    } 

    System.Windows.Forms.MessageBox.Show("There was an error in RSCShell:" + 
      theRoutine + Constants.vbLf + Constants.vbLf + Constants.vbLf + 
      "Error " + errorNumber + " - " + ErrorDesc + 
      Constants.vbLf + Constants.vbLf + "Please contact SUPPORT to resolve this issue"); 
    System.Environment.Exit(0); 
} 
+2

文字列変数を作成し、これを "AbendProgram"メソッドに渡します。エラーメッセージは何が間違っているかを示しています。 refまたはout引数は、代入可能な変数でなければなりません。私はあなたが完全にメソッド定義からrefを削除することをお勧めしたい - あなたはそれを正しく使用していない。 –

+5

パラメータはrefパラメータである必要はありません。とにかくメソッド内で値を変更することはありません。 –

+0

@Dennis_Eが指摘するように、なぜあなたは 'ref'キーワードを全く使っていませんか? –

答えて

1

AbendProgramが参照文字列をとります。あなたがrefに "open database"を渡すと、それは割り当てられない定数のリテラル文字列です。代わりに文字列変数を渡す必要があります。

関連する問題