2017-09-07 2 views
0

Ich versuche, einige ältere VB.Net-Code zu C# zu migrieren. Ich benutze den Telerik Code Converter.Warum kann ich mit diesem Code nicht von der Method Group in Type-Fehler konvertieren?

Hier ist mein Vermächtnis VB.Net-Code

Public Shared Function GetEnumIntFromString(ByVal value As String, ByVal convertTo As [Enum]) As Integer 
    Dim enumValueArray() As Integer 

    Try 
     If value.Trim.Length > 0 Then 
      enumValueArray = [Enum].GetValues(convertTo.GetType) 

      For Each i As Integer In enumValueArray 
       If value.ToUpper = [Enum].GetName(convertTo.GetType, i).ToUpper Then 
        Return i 
       End If 
      Next 
     End If 

     'Return Integer.MinValue 
     Throw New Exception("Invalid Enum value. Cannot convert '" & value & "' to " & convertTo.GetType.ToString) 
    Catch ex As Exception 
     Throw New Exception(ex.Message) 
    End Try 
End Function 

Und hier ist die Ausgabe von Telerik/s Codewandler ...

public static int GetEnumIntFromString(string value, Enum convertTo) 
    { 
     int[] enumValueArray = null; 

     try 
     { 
      if (value.Trim.Length > 0) 
      { 
       enumValueArray = Enum.GetValues(convertTo.GetType); 

       foreach (int i in enumValueArray) 
       { 
        if (value.ToUpper == Enum.GetName(convertTo.GetType, i).ToUpper) 
        { 
         return i; 
        } 
       } 
      } 

      //Return Integer.MinValue 
      throw new Exception("Invalid Enum value. Cannot convert '" + value + "' to " + convertTo.GetType.ToString); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message); 
     } 
    } 

    //======================================================= 
    //Service provided by Telerik (www.telerik.com) 
    //Conversion powered by NRefactory. 
    //Twitter: @telerik 
    //Facebook: facebook.com/telerik 
    //======================================================= 

ich bin immer Kann von ‚Method Gruppe nicht konvertieren 'to' Type 'Fehler (rote Squiggle-Linie) unter convretTo.GetType. Ich habe versucht, Klammern nach .GetType hinzufügen, aber das gab mir nur einen weiteren Fehler "Kann nicht implizit konvertieren Typ 'System.Aray' in 'int []'"

Die Absicht des Codes besteht darin, einen ENUM-String-Wert und den Typ von ENUM und erhalten einen ganzzahligen Wert der Enumeration.

Alle Ideen würden sehr geschätzt werden.

Antwort

4

Ich würde Ihnen vorschlagen, gerade jetzt zu stoppen, dass Code-Wandler verwenden, ist es viel der Klammer fehlt:

  • value.Trim.Length =>value.Trim().Length
  • convertTo.GetType =>convertTo.GetType()
  • value.ToUpper =>value.ToUpper()
  • Enum.GetName(convertTo.GetType, i).ToUpper =>Enum.GetName(convertTo.GetType(), i).ToUpper()
  • convertTo.GetType.ToString =>convertTo.GetType().ToString()

aber hier ist ein einfacher Weg, zu tun, was Sie wollen:

public static int GetEnumIntFromString(string value, Enum convertTo) 
{ 
    return (int)(Enum.Parse(convertTo.GetType(), value); 
} 
+0

Es Klammer fehlt, weil sie in der VB.NET-Code fehlt ... Das ist nicht der Fehler des Konverters. VB.NET unterstützt Aufrufmethoden, ohne sie mit '()' zu versehen. –

+0

@VisualVincent Ich weiß, dass ich begann in VB.NET zu programmieren. Der Konverter sollte erkennen, dass das in C# nicht gültig ist und entweder fehlschlagen oder das fehlende '()' hinzufügen. –

+0

Wie? Es kann nicht wissen, ob "Trim" eine Methode, Eigenschaft oder sogar ein Feld ist. Es konvertiert die Syntax, weshalb Sie Snippets konvertieren können, die auf benutzerdefinierte Klassen und andere benutzerdefinierte Elemente verweisen, ohne dass sie sich über irgendetwas beschweren. –

Verwandte Themen