C#Enum Alternate
我没有那么多C#经验, 我怀疑,正如我们所知,在编码过程中,我们可以从intellisense中选择Enum项目,而不是枚举任何其他从intellisense获取项目的可能性。
我的要求是我不想要Enum,我在数据库表中的国家/地区列。我想对每个国家进行一些验证,例如:
if( db.Countries.India )
{
//some validation
}
答案 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"))