C# - 开关枚举 - 类型名称“”在类型“”中不存在
C# - Switch Enum - Type name ' ' does not exist in the type ' '
在 switch case 中使用它时出现错误“类型名称 'Home' 在类型 'MenuEnum' 中不存在”。如果我只是使用 if 语句,它就可以正常工作。
问题是当我使用 MenuEnum.Home 时出现 IDE 错误并且我的代码无法编译。
我还在代码示例中切换到下面的常规 switch 语句。
在下面添加了代码
public void Selected(MenuEventArgs<MenuItem> args)
{
//The ULR to navigate to
var url = string.Empty;
try
{
//If there is no data do nothing
if(string.IsNullOrEmpty(args.Item.Text))
return;
//switch on the incoming text
switch (args.Item.Text)
{
//IDE Error on home (will not compile)...
case MenuEnum.Home.ToString():
url = "/";
break;
default:
url = "";
break;
}
//working code
if (args.Item.Text == MenuEnum.Home.ToString().Replace('_', ' '))
{
url = "/";
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Navigation.NavigateTo(url);
}
/-枚举文件-/
namespace ManagerDashboard2022.Client.ENUMs;
/// <summary>
/// The Items in the menu
/// </summary>
public enum MenuEnum
{
Home
}
谢谢@cly。
我需要解析枚举并打开返回的项目
public void Selected(MenuEventArgs<MenuItem> args)
{
//The ULR to navigate to
var url = string.Empty;
try
{
//If there is no data do nothing
if(string.IsNullOrEmpty(args.Item.Text))
return;
//convert text to enum
var menuItem = Enum.Parse<MenuEnum>(args.Item.Text);
//switch enum
url = menuItem switch
{
MenuEnum.Home => "/",
_ => ""
};
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Navigation.NavigateTo(url);
}
如果你真的想打开字符串值,你可以替换它
case MenuEnum.Home.ToString():
和
case nameof(MenuEnum.Home):
nameof
在编译时求值以产生字符串常量“Home”(在本例中)。由于这是一个 常量,您可以“切换”它。
使用 nameof 而不是仅使用字符串“Home”的优点在于,使用 nameof 时 MenuEnum.Home 值需要存在 - 因此您会在拼写错误时遇到编译器错误。
您收到的错误消息:
"The type name 'Home' does not exist in the type 'MenuEnum'"
在这种情况下不是很有帮助。它应该是(IMO)类似“你不能将运行时表达式作为案例标签”的东西。
在 switch case 中使用它时出现错误“类型名称 'Home' 在类型 'MenuEnum' 中不存在”。如果我只是使用 if 语句,它就可以正常工作。
问题是当我使用 MenuEnum.Home 时出现 IDE 错误并且我的代码无法编译。
我还在代码示例中切换到下面的常规 switch 语句。
在下面添加了代码
public void Selected(MenuEventArgs<MenuItem> args)
{
//The ULR to navigate to
var url = string.Empty;
try
{
//If there is no data do nothing
if(string.IsNullOrEmpty(args.Item.Text))
return;
//switch on the incoming text
switch (args.Item.Text)
{
//IDE Error on home (will not compile)...
case MenuEnum.Home.ToString():
url = "/";
break;
default:
url = "";
break;
}
//working code
if (args.Item.Text == MenuEnum.Home.ToString().Replace('_', ' '))
{
url = "/";
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Navigation.NavigateTo(url);
}
/-枚举文件-/
namespace ManagerDashboard2022.Client.ENUMs;
/// <summary>
/// The Items in the menu
/// </summary>
public enum MenuEnum
{
Home
}
谢谢@cly。
我需要解析枚举并打开返回的项目
public void Selected(MenuEventArgs<MenuItem> args)
{
//The ULR to navigate to
var url = string.Empty;
try
{
//If there is no data do nothing
if(string.IsNullOrEmpty(args.Item.Text))
return;
//convert text to enum
var menuItem = Enum.Parse<MenuEnum>(args.Item.Text);
//switch enum
url = menuItem switch
{
MenuEnum.Home => "/",
_ => ""
};
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Navigation.NavigateTo(url);
}
如果你真的想打开字符串值,你可以替换它
case MenuEnum.Home.ToString():
和
case nameof(MenuEnum.Home):
nameof
在编译时求值以产生字符串常量“Home”(在本例中)。由于这是一个 常量,您可以“切换”它。
使用 nameof 而不是仅使用字符串“Home”的优点在于,使用 nameof 时 MenuEnum.Home 值需要存在 - 因此您会在拼写错误时遇到编译器错误。
您收到的错误消息:
"The type name 'Home' does not exist in the type 'MenuEnum'"
在这种情况下不是很有帮助。它应该是(IMO)类似“你不能将运行时表达式作为案例标签”的东西。