【问题标题】:Passing an enum as argument into a method in C#将枚举作为参数传递给 C# 中的方法
【发布时间】:2021-07-29 15:13:28
【问题描述】:

我之前问过这个问题,但由于解释不够而将其删除。

我想再问一次..

我有一个这样的枚举:

 public enum Call_Status
 {
     CALL_THIS,
     CALL_THAT,
     CALL_IT
 }

在我的控制器中,我试图让我的代码动态化,因此尝试将 ENUM 作为参数传递给;

调用方法:

  bool result =  Method1 (Call_Status.CALL_THIS)

接收方式

  public bool Method1(Call_Status status)
  {
       //Processing
       //I build a List<string> lstValue;

       //Now I'm trying to dynamically determine if this LIST contains my enum value

       if(lstValue.Contains(nameof(Permission.status??))) <-- I am unsure how this needs to be coded so I can do exactly this
       {
          return true;
       }

   return false;
  }

【问题讨论】:

  • lstValue.Contains(status.ToString())?还是lstValue.Select(Enum.Parse&lt;Call_Status&gt;).Contains(status)?
  • 为什么不存储List&lt;Call_Status&gt;?然后是lstValue.Contains(status)
  • 为什么是 List?
  • @TimSchmelter - 我的错。 List 是其他值的列表。构建 List 后,我想检查该列表是否包含枚举值。

标签: c# .net enums


【解决方案1】:

您可以将字符串解析为枚举或使用enum.ToString 以相反的方式。但第一个问题是:为什么你一开始不使用List&lt;Call_Status&gt;?然后是lstValue.Contains(status)。

如果不可能,请使用Enum.TryParse/Enum.Parse(如果安全的话)

public bool Method1(Call_Status status)
{
     // ...
     return lstValue.Select(s => Enum.Parse<Call_Status>(s)).Contains(status));
}

或相反的方式(更简单更安全,不需要Enum.TryParse,但也不需要验证):

public bool Method1(Call_Status status)
{
     // ...
     return lstValue.Contains(status.ToString());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多