2016-06-20 20 views
-3

Ich versuche, eine Ausnahme zu fangen und diese Werte an eine andere Methode übergeben, aber ich bin immer Argument ‚1‘ muss mit ‚ref‘ Schlüsselwort, A ref oder out-Argument übergeben werden müssen eine zuweisbare Variable und Die beste überladene Methodenübereinstimmung für abc.AbendProgram (ref string, ref System.Exception) hat einige ungültige Argumente. Bitte helfen Sie mir, da ich nicht sicher bin, welchen Fehler ich mache.Methodenparameter mit ref nicht funktioniert

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

Erstellen Sie eine String-Variable und übergeben Sie diese an Ihre "AbendProgram" -Methode. Die Fehlermeldung sagt Ihnen, was falsch ist. Ein Ref- oder Out-Argument muss eine zuweisbare Variable sein. Ich würde empfehlen, ref aus der Methodendefinition zu entfernen - Sie verwenden es nicht korrekt. –

+5

Die Parameter müssen keine Ref-Parameter sein. Sie ändern ihre Werte niemals innerhalb der Methode. –

+0

Wie @Dennis_E darauf hinweist, warum verwenden Sie das Schlüsselwort 'ref' überhaupt? –

Antwort

1

AbendProgram nimmt eine Ref-Zeichenfolge. Wenn Sie ref übergeben, öffnen Sie die Datenbank, das ist eine konstante literale Zeichenfolge, der nicht zugewiesen werden kann. Sie müssen stattdessen eine String-Variable übergeben.