而不是Enum

时间:2018-04-26 05:53:10

标签: c# enums

C#Enum Alternate

我没有那么多C#经验, 我怀疑,正如我们所知,在编码过程中,我们可以从intellisense中选择Enum项目,而不是枚举任何其他从intellisense获取项目的可能性。

我的要求是我不想要Enum,我在数据库表中的国家/地区列。我想对每个国家进行一些验证,例如:

if( db.Countries.India )
{
   //some validation
}

4 个答案:

答案 0 :(得分:4)

我不知道db是什么或为什么你不想使用enum(因为你可以完美地做到这一点,见下文),但也许这可以帮助你:< / p>

public class Countries
{
    public const string India = "India";
    ...
}

或者如果您想要国家/地区的ID,可以使用

public class Countries
{
    public const int India = 42;
    ...
}

这两种方法都可以这样访问:

var india = Countries.India;

我知道这没有被问到,但由于问题表明该问题可能是XY problem,所以我推荐采用以下方法:

假设您的国家/地区表格如下:

CountryID | Name
------------------------------------
1         | India
42        | United States of America

然后你可以制作一个看起来像这样的枚举:

public enum Country
{
    India = 1,

    [Description("United States of America")]
    United States = 42
}

并且您不会丢失任何信息。

答案 1 :(得分:2)

如果您希望intellisense在您的集合中显示数据,那么它不是如何工作的。您的C#源代码无法使用数据库中的数据,因为数据库中的数据可能会发生变化,而您的代码将会引用某些固定名称属性。

如果您希望intellisense在点击“。”时显示一些可用的函数(扩展函数),那么您必须包含这些函数在开头定义的命名空间。你的文件,以便智能感知显示可能性。

到目前为止,最有用的一个,特别是执行验证,将使用:

using System.Linq;

在文件的开头

然后你可以使用这样的东西:

if (db.Countries.Any(c => c.Name == "India" ) {
     // this block will execute only if at least one country is India
}

foreach (var country in db.Countries.Where(c => c.Name == "India")) {
     // this block will execute for each element in countries that has Name equals India and attach the country to some variable so you can perform more work with it
}

如果你想以某种方式获得一个固定值列表,比如枚举,一些有趣的方法是使用常量,这已在托马斯的回答中显示。

答案 2 :(得分:1)

  

我想对每个国家/地区执行一些验证,例如

您必须循环数据库中的所有国家/地区,这些国家/地区未在您的代码段中显示。如果您的验证仅针对少数国家而非全部,则可以使用switch语句。

重要提示: jQuery( ".datepick" ).datepicker(); //Add date picker. $('#addnew').click(function(){ $(".datepick").datepicker("destroy"); //Distroy the date picker. /* Code to add a new row */ jQuery( ".datepick" ).datepicker(); //recreating the date picker }) 只会产生可维护性问题。如果明天你决定从Db中删除“India”,你还必须更新你的枚举。

Enum

作为备用,您可以运行预构建脚本以从Db生成枚举类。这可以帮助您克服可维护性问题,但仍然会保留上述循环。

答案 3 :(得分:-1)

试试这个:

if(db.Countries.ToList().Any(t=>t.country=="India"))