【问题标题】:Enum: need to get the name of the enum, not its int value, as a string枚举:需要获取枚举的名称,而不是它的int值,作为字符串
【发布时间】:2011-05-20 00:23:39
【问题描述】:

我有一个包含一大堆值的枚举(这里只显示了三个):

public enum LookupType
{
   Alignment,
   Language,
   ReEmbedBehavior
}

然后我有一个基于名为 LookupType 的 varchar 字段获取数据的方法...我想要将此方法的调用者限制为仅数据库中的查找类型...所以在我的 WHERE 末尾子句,我希望枚举名称为字符串,而不是它的整数值。

然后调用者会执行 GetLookupsByLookupType(LookupType.Language) 之类的操作,而我的方法会将调用设为“where lookuptype = 'Language'”

public List<Lookup> GetLookupsByLookupType(UnicornMedia.Core.DomainModel.Enumerations.LookupType lookupType)
        {
            var lookups = new List<Lookup>();
            string SQL = String.Format(@"Select id, name, value, lookuptype
                                         from lookups
                                         where lookuptype = '{0}'", lookupType.ToString());

            ...<snip>...                                         
        }

这可能很简单,但我似乎不时遇到这个问题,而不是弄清楚,我最终只是使用字典......无论如何,它就是,谢谢

【问题讨论】:

  • 你确定 ToString() 没有给你名字吗?
  • 不,我不确定,但碰巧我无法在签入之前进行调试或测试,所以我需要确保我做对了
  • 在签入之前不进行测试或调试?这听起来根本不对……
  • @JBenjamin,相信我,它有效 :)
  • 查看 SnippetCompiler (sliver.com/dotnet/SnippetCompiler) 之类的工具 - 让您对 C# 进行简短的 sn-p 尝试,无需 Visual Studio 的所有开销!绝对无价的......

标签: c# enums


【解决方案1】:

你试过Enum.GetName吗?

实际上,下面的 sn-p 表明简单地调用 ToString 也可以。

enum LookupType {
    Language
}
public class Program {
    public static void Main(string[] args) {
        string str = string.Format("{0}", LookupType.Language);
        // str = "Language"
        Console.WriteLine(LookupType.Language);
        // output: Language
    }
}

【讨论】:

    【解决方案2】:

    试试下面的

    string name = System.Enum.GetName(typeof(LookupType), LookupType.Language);
    

    【讨论】:

      【解决方案3】:

      只需执行 .ToString() 即可将枚举名称作为字符串值获取。

      【讨论】:

        【解决方案4】:

        您可以使用 GetName 方法 (http://msdn.microsoft.com/en-us/library/system.enum.getname.aspx):

        Enum.GetName(typeof(LookupType), lookupType);
        

        【讨论】:

          【解决方案5】:

          您不需要 GetName...

          LookupType.Alignment.ToString();
          

          就像您在代码中一样...

          lookupType.ToString()
          

          【讨论】:

            【解决方案6】:

            您的代码应该可以正常工作。我运行了以下内容,字符串返回了预期的结果。

            class Program
            {
                static void Main(string[] args)
                {
                    LookupType lookupType = LookupType.Language;
            
                    Console.WriteLine(GetLookupsByLookupType(lookupType));
            
                    Console.Read();
                }
            
                public static string GetLookupsByLookupType(LookupType lookupType)
                {
                    string SQL = String.Format(@"Select id, name, value, lookuptype from lookups where lookuptype = '{0}'", lookupType.ToString());
            
                    return SQL;                  
                }
            
            }
            
            public enum LookupType
            {
                Alignment,
                Language,
                ReEmbedBehavior
            }
            

            确保您没有像上面显示的那样传递您的 SQL 字符串。将字符串放在一行中,或使用以下内容:

                    string SQL = String.Format(@"Select id, name, value, lookuptype from " + 
                        "lookups where lookuptype = '{0}'", lookupType.ToString());
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-11
              相关资源
              最近更新 更多