C# 将字符串值与枚举的字符串值进行比较
下面的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) {
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
通常也是一个好主意。