Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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#_.net 4.0_Enums - Fatal编程技术网

C# 将字符串值与枚举的字符串值进行比较

C# 将字符串值与枚举的字符串值进行比较,c#,.net-4.0,enums,C#,.net 4.0,Enums,下面的C代码给出了以case开头的两行错误。错误为“应为常量值” 下面的VB.NET代码正在运行。我将此代码用作用C#编写的真实应用程序的示例 我看不出有什么问题,但这并不意味着没有问题。我使用了两个在线代码转换器来仔细检查语法。两者都返回相同的结果,这将产生错误 ExportFormatType是第三方库中的枚举 有什么建议吗?谢谢 public void ExportCrystalReport(string exportType, string filePath) {

下面的C代码给出了以
case
开头的两行错误。错误为“应为常量值”

下面的VB.NET代码正在运行。我将此代码用作用C#编写的真实应用程序的示例

我看不出有什么问题,但这并不意味着没有问题。我使用了两个在线代码转换器来仔细检查语法。两者都返回相同的结果,这将产生错误

ExportFormatType是第三方库中的枚举

有什么建议吗?谢谢

public void ExportCrystalReport(string exportType, string filePath)
    {
        if (_CReportDoc.IsLoaded == true)
        {
            switch (exportType)
            {
                case  ExportFormatType.PortableDocFormat.ToString():  // Or "PDF"
                    ExportTOFile(filePath, ExportFormatType.PortableDocFormat);
                    break;
                case ExportFormatType.CharacterSeparatedValues.ToString(): // Or "CSV"
                    ExportTOFileCSV(filePath, ExportFormatType.CharacterSeparatedValues);

                    break;
            }
        }


 Public Sub ExportCrystalReport(ByVal exportType As String, ByVal filePath As String)

        If _CReportDoc.IsLoaded = True Then
            Select Case exportType
                Case ExportFormatType.PortableDocFormat.ToString 'Or "PDF"
                    ExportTOFile(filePath, ExportFormatType.PortableDocFormat)
                Case ExportFormatType.CharacterSeparatedValues.ToString ' Or "CSV"
                    ExportTOFileCSV(filePath, ExportFormatType.CharacterSeparatedValues)
在C#中,case语句标签必须是编译时已知的值。我不相信VB.NET也有同样的限制

原则上,
ToString()
可以运行任意代码,因此在编译时它的值是未知的(即使在您的例子中它是一个枚举)

要解决此问题,您可以首先将
exportType
解析为枚举,然后打开C#中的枚举值:

或者,您可以将开关转换为if/else语句:

if( exportType == ExportFormatType.PortableDocFormat.ToString() )
   // etc...
在C#中,case语句标签必须是编译时已知的值。我不相信VB.NET也有同样的限制

原则上,
ToString()
可以运行任意代码,因此在编译时它的值是未知的(即使在您的例子中它是一个枚举)

要解决此问题,您可以首先将
exportType
解析为枚举,然后打开C#中的枚举值:

或者,您可以将开关转换为if/else语句:

if( exportType == ExportFormatType.PortableDocFormat.ToString() )
   // etc...

可能应该在此处使用
Enum.TryParse
,以处理传入的字符串不是为枚举定义的命名常量之一的情况。@JimL很好。在处理任意输入开关语句时,
default
大小写通常也是一个好主意。可能应该在这里使用
Enum.TryParse
,以处理传入的字符串不是为枚举定义的命名常量之一的情况。@JimL很好。在处理任意输入开关语句时,
default
通常也是一个好主意。