我有一个数据库中的婚姻状况字段,每个数字代表不同的表中的婚姻状况。第一个表有数字1,3,4:如何将号码映射到婚姻状态
1 = single 3 = married 4 = divorced
第二的值有:
single married divorced
我需要一个if语句如下:如果表中的字段返回1我想价值如果3'已婚'并且如果4'离婚'(使用Response.Write),则写入消息'single'。
我有一个数据库中的婚姻状况字段,每个数字代表不同的表中的婚姻状况。第一个表有数字1,3,4:如何将号码映射到婚姻状态
1 = single 3 = married 4 = divorced
第二的值有:
single married divorced
我需要一个if语句如下:如果表中的字段返回1我想价值如果3'已婚'并且如果4'离婚'(使用Response.Write),则写入消息'single'。
string GetStatus(int StatusCode)
{
return StatusCode == 1 ? "single" : StatusCode == 3 ? "married" : "divorced";
}
顺便说一句,通常没有很好的理由来规范这个目标。如果您将实际状态存储在表中并且磁盘空间量可以忽略不计,性能会更好。
编辑: @乔恩的想法可能比这个功能更好
你可以写,如果其他人,或case语句,但容易,只需使用阵列对于这样的小单子
string[] maritalStatus = new string[] { "", "Single", "", "Married", "Divorced"};
Response.Write (maritalStatus[dbValue]);
我喜欢这个,富有创意和灵活。 +1 – Sruly 2010-08-04 10:56:48
我建议词典
感谢您的投票。只需要再写几行就可以了,上面的代码只是简短而且简洁,如果id没有实际跳转,看起来会更好 – 2010-08-04 11:12:51
另一个选项将声明一个枚举映射到像这样的值:
enum RelationshipStatus
{
Single = 1,
Married = 3,
Divorced = 4
}
然后你可以调用ToString方法包含您的枚举值的变量。请注意,您需要将SQL表中的整数值转换为枚举类型。
这种方法的优点是可以完全消除条件if语句,我认为结果更具可读性。缺点是如果你需要的话,本地化到其他语言(翻译)并不容易。
也许一个枚举将是最优雅的方法?
public enum MaritalStatus
{
Single = 1,
Married = 3,
Divorced = 4
}
然后,你可以简单地使用Enum.GetName()和Enum.Parse()为字符串,int和MaritalStatus对象之间的转换。这也可能为您在其他一些业务逻辑中提供更优雅的解决方案。
有不同的方法来做到这一点,好的和坏的方面
像 `
public enum MaritalStatus
{
Single = 1,
Married = 3,
Divorced = 4
}
MaritalStatus status = (MaritalStatus) 4;
Console.WriteLine(status);
` 等
(未遂清理的问题,不知道如果我不小心改变它的意思。) – dtb 2010-08-04 10:54:35