为了账号安全,请及时绑定邮箱和手机立即绑定

代替枚举[

代替枚举[

C#
不负相思意 2021-04-28 17:45:37
C#枚举替代我对C#的经验不是很多,我对此感到怀疑,因为我们知道,在编码时,我们能够以类似的方式从智能感知中选择Enum项,而不是通过枚举从智能感知中获取项的任何其他可能性。我的要求是我不希望枚举,我在数据库表中有“国家”列。我想对每个国家/地区执行一些验证,例如:if( db.Countries.India ){   //some validation}
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

我不知道它是什么db,为什么不想要使用它enum(因为您可以做到这一点,请参阅下文),但这也许可以帮助您:


public class Countries

{

    public const string India = "India";

    ...

}

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


public class Countries

{

    public const int India = 42;

    ...

}

可以通过以下方式访问这两种建议的方法:


var india = Countries.India;

我知道没有人问这个问题,但是由于问题表明该问题可能是XY问题,因此我建议您采用以下方法:


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


CountryID | Name

------------------------------------

1         | India

42        | United States of America

那么您可以创建一个如下所示的枚举:


public enum Country

{

    India = 1,


    [Description("United States of America")]

    United States = 42

}

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


查看完整回答
反对 回复 2021-05-16
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

如果您想让智能感知向您显示集合中的数据,那不是它的工作原理。您的C#源代码无法使用数据库中的数据,因为数据库中的数据可能会更改,而您的代码仍会引用某些固定名称属性。


如果您想在按下点号'。'时向intellisense显示一些可用的功能(扩展功能),则必须在文件开头包含在其中定义这些功能的名称空间,以使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

}

如果您希望以某种方式拥有固定值列表(例如枚举),则一些有趣的方法是使用常量,这已在Thomas的答案中得到了证明。


查看完整回答
反对 回复 2021-05-16
  • 3 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信