将字符串值与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)
在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...