在C#中使用枚举在Switch Case中:

huangapple go评论109阅读模式
英文:

Use an Enum in a Switch Case C#

问题

我有一个不同AppTypes的枚举。

  1. public enum AppType
  2. {
  3. DefaultApps = 1,
  4. GlobalApps = 3,
  5. PrivateApps = 'L'
  6. }

我将收到一个形如"1"、"3"或"L"的字符串,并希望在switch语句中使用它。

我尝试像下面这样做,但不起作用。我漏掉了什么吗?

  1. switch (appTypeString)
  2. {
  3. case $"{(char)AppType.DefaultApps}":
  4. Console.WriteLine("Default Catalog Apps");
  5. break;
  6. case nameof(AppType.GlobalApps):
  7. Console.WriteLine("Global Catalog Apps");
  8. break;
  9. case nameof(AppType.PrivateApps):
  10. Console.WriteLine("Private Catalog Apps");
  11. break;
  12. default:
  13. Console.WriteLine("Unknown App Type");
  14. break;
  15. }
英文:

I have an Enum of different AppTypes.

  1. public enum AppType
  2. {
  3. DefaultApps = 1,
  4. GlobalApps = 3,
  5. PrivateApps = 'L'
  6. }

I will receive a string of form "1", "3" or "L" and want to use this in switch statement.
I am trying to do as below. but not working. am I missing anything.

  1. switch (appTypeString)
  2. {
  3. case $"{(char)AppType.DefaultApps}:": // also tried nameof(AppType.GlobalApps)
  4. Console.WriteLine("Default Catalog Apps");
  5. break;
  6. case nameof(AppType.GlobalApps):
  7. Console.WriteLine("Global Catalog Apps");
  8. break;
  9. case nameof(AppType.PrivateApps):
  10. Console.WriteLine("Private Catalog Apps");
  11. break;
  12. default:
  13. Console.WriteLine("Unknown App Type");
  14. break;
  15. }

答案1

得分: 2

以下是翻译好的代码部分:

  1. 你可以这样做:

AppType test = AppType.DefaultApps;
switch (test)
{
case AppType.DefaultApps:
Console.WriteLine("默认目录应用");
break;
case AppType.GlobalApps:
Console.WriteLine("全局目录应用");
break;
case AppType.PrivateApps:
Console.WriteLine("私有目录应用");
break;
default:
Console.WriteLine("未知应用类型");
break;
}

  1. 在你的情况下,你的输入是一个字符串,我会这样做:
  2. ```csharp
  3. string val = "L";
  4. AppType test;
  5. bool flag = Enum.TryParse(val, out test);
  6. // 由于AppType.PrivateApps的类型是char,它将无法通过Enum.TryParse(),因此我们进行转换
  7. if (!flag)
  8. {
  9. if (val.Length == 1)
  10. test = (AppType)(val.ToCharArray().First());
  11. }
  12. switch (test)
  13. {
  14. case AppType.DefaultApps:
  15. Console.WriteLine("默认目录应用");
  16. break;
  17. case AppType.GlobalApps:
  18. Console.WriteLine("全局目录应用");
  19. break;
  20. case AppType.PrivateApps:
  21. Console.WriteLine("私有目录应用");
  22. break;
  23. default:
  24. Console.WriteLine("未知应用类型");
  25. break;
  26. }
  1. <details>
  2. <summary>英文:</summary>
  3. You can do like this:

AppType test = AppType.DefaultApps;
switch (test)
{
case AppType.DefaultApps:
Console.WriteLine("Default Catalog Apps");
break;
case AppType.GlobalApps:
Console.WriteLine("Global Catalog Apps");
break;
case AppType.PrivateApps:
Console.WriteLine("Private Catalog Apps");
break;
default:
Console.WriteLine("Unknown App Type");
break;
}

  1. In your case you have a string as the Input, I would do like this:

string val = "L";
AppType test;
bool flag = Enum.TryParse(val, out test);
//Since AppType.PrivateApps is of type char it will fail the Enum.TryParse() so we make a conversion
if (!flag)
{
if(val.Length == 1)
test = (AppType)(val.ToCharArray().First());
}
switch (test)
{
case AppType.DefaultApps:
Console.WriteLine("Default Catalog Apps");
break;
case AppType.GlobalApps:
Console.WriteLine("Global Catalog Apps");
break;
case AppType.PrivateApps:
Console.WriteLine("Private Catalog Apps");
break;
default:
Console.WriteLine("Unknown App Type");
break;
}

  1. </details>
  2. # 答案2
  3. **得分**: 0
  4. 你还可以使用新的 `switch` 表达式:
  5. ```cs
  6. var toPrint = appTypeString switch
  7. {
  8. AppType.DefaultApps => "默认目录应用",
  9. AppType.GlobalApps => "全局目录应用",
  10. AppType.PrivateApps => "私有目录应用",
  11. _ => "未知应用类型",
  12. };
  13. Console.WriteLine(toPrint);
英文:

You can also use the new switch expression:

  1. var toPrint = appTypeString switch
  2. {
  3. AppType.DefaultApps =&gt; &quot;Default Catalog Apps&quot;,
  4. AppType.GlobalApps =&gt; &quot;Global Catalog Apps&quot;,
  5. AppType.PrivateApps =&gt; &quot;Private Catalog Apps&quot;,
  6. _ =&gt; &quot;Unknown App Type&quot;,
  7. };
  8. Console.WriteLine(toPrint);

huangapple
  • 本文由 发表于 2023年6月12日 23:45:52
  • 转载请务必保留本文链接:https://go.coder-hub.com/76458277.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定