将字符串值与enum的字符串值进行比较

本文关键字:字符串 比较 enum | 更新日期: 2023-09-27 18:08:55

下面的c#代码在以case开头的两行上给了我错误。错误是"期望一个常量"

VB。. NET代码下面是工作。我使用这段代码作为我在c#中编写的真实应用程序的样本。

我看不出问题,但这并不意味着一个人不存在。我使用了几个在线代码转换器来仔细检查语法。两者都返回相同的结果,从而给出错误。

ExportFormatType是第三方库中的enum。

有什么建议吗?谢谢!

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)

将字符串值与enum的字符串值进行比较

在c#中,case语句标签必须是编译时已知的值。我不相信同样的限制适用于VB.NET。

原则上,ToString()可以运行任意代码,所以它的值在编译时是未知的(即使在你的例子中它是一个enum)。

要解决这个问题,您可以首先将exportType解析为enum,然后在c#中打开enum值:

ExportFormatType exportTypeValue = Enum.Parse(typeof(ExportFormatType), exportType);
switch( exportTypeValue )
{
    case ExportFormatType.PortableDocFormat: // etc...

或者您可以将switch转换为if/else语句:

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