Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我无法使用此代码从方法组转换为类型错误?_C#_Vb.net_Enums_Vb.net To C# - Fatal编程技术网

C# 为什么我无法使用此代码从方法组转换为类型错误?

C# 为什么我无法使用此代码从方法组转换为类型错误?,c#,vb.net,enums,vb.net-to-c#,C#,Vb.net,Enums,Vb.net To C#,我正在尝试将一些遗留的VB.Net代码迁移到c#。我正在使用Telerik代码转换器 这是我遗留的VB.Net代码 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

我正在尝试将一些遗留的VB.Net代码迁移到c#。我正在使用Telerik代码转换器

这是我遗留的VB.Net代码

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
这是Telerik/s代码转换器的输出

    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
    //=======================================================
我在convereto.GetType下遇到无法从“方法组”转换为“类型”错误(红色的曲线)。我尝试在.GetType之后添加括号,但这只是给了我另一个错误“无法将类型'System.Aray'隐式转换为'int[]”

代码的目的是提供枚举字符串值和枚举类型,并获取枚举的整数值


如果您有任何想法,我们将不胜感激。

我建议您立即停止使用该代码转换器,因为它缺少很多括号:

  • 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()
然而,这里有一个更简单的方法来做你想做的事情:

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

我建议您现在停止使用该代码转换器,它缺少很多括号:

  • 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()
然而,这里有一个更简单的方法来做你想做的事情:

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

它缺少括号,因为它们在VB.NET代码中缺少。。。那不是转换器的故障。VB.NET支持调用方法,而不必在方法后面加上
()
@visualvent。我知道,我开始在VB.NET中编程。转换器应该意识到这在c中是无效的,要么失败,要么添加缺少的
()
?它不可能知道
Trim
是方法、属性还是字段。它转换语法,这就是为什么您可以转换引用自定义类和其他自定义成员的代码段,而不必抱怨任何事情。@VisualEvent保留框架提供的类列表?我的意思是,例如,你不能扩展
string
来拥有一个自定义属性,所以如果它不在框架中,就让它保持原样,所以
string.ToUpper
显然不是一个属性/字段,而是一个方法。这也需要对代码进行[不必要的]解析。到目前为止,我还不知道有哪个转换器能做到这一点。。。如果你知道的话,我很想看看!它缺少括号,因为它们在VB.NET代码中缺少。。。那不是转换器的故障。VB.NET支持调用方法,而不必在方法后面加上
()
@visualvent。我知道,我开始在VB.NET中编程。转换器应该意识到这在c中是无效的,要么失败,要么添加缺少的
()
?它不可能知道
Trim
是方法、属性还是字段。它转换语法,这就是为什么您可以转换引用自定义类和其他自定义成员的代码段,而不必抱怨任何事情。@VisualEvent保留框架提供的类列表?我的意思是,例如,你不能扩展
string
来拥有一个自定义属性,所以如果它不在框架中,就让它保持原样,所以
string.ToUpper
显然不是一个属性/字段,而是一个方法。这也需要对代码进行[不必要的]解析。到目前为止,我还不知道有哪个转换器能做到这一点。。。如果你知道的话,我很想看看!