最佳实践 - 字符串比较

时间:2011-03-24 13:55:05

标签: .net asp.net-mvc

我有一个带有id和文本值的查找表。

检查值是x还是y的最佳方法是什么?硬编码字符串?使用“枚举”?

编辑: 我的意思是,可以这样做:

if (VALUE_FROM_DATABASE == "value x")
then do this

如果数据库中的值将来发生变化怎么办?我想可能没有办法解决这个问题,当发生这种情况时我们总是要改变代码?

8 个答案:

答案 0 :(得分:1)

只需使用简单的if:

if(value=="myString") {}  

我在这里看不到Enum

的原因

答案 1 :(得分:0)

if(String.Compare(string, compareString,true) == 0)
{

}

答案 2 :(得分:0)

如果您有一个查找表并且正在从表中读取值等,则不能使用switch语句,因为它必须是constant

答案 3 :(得分:0)

我倾向于在任何查找表上放置SystemId值,改变程序的工作方式,然后创建匹配的enum以在代码中引用它(尽管如果我使用的是NHibernate ,我只是使用枚举)。如果我要完全偏执严格,我会在SystemId列上创建一个检查约束和一个唯一的,以阻止任何人添加任何内容,而不必非常努力。

答案 4 :(得分:0)

关于枚举问题(编辑后)

可能您的意思是您的数据库查找表具有枚举样式值“In store | Out of stock | Unavailable”。如果你想在你的代码中使用枚举,你必须跳过一些箍:

  1. 在表格中创建一个额外字段,这是一个粘性字段,不应更改
  2. 允许更改其他字段(说明/名称)
  3. 创建一个枚举,在DAO中创建适当的方法,以确保任何getter / setter只接受该枚举 3A。对于此字段引用的其他表中的其他字段也是如此
  4. 存储或找到枚举范围之外的值时引发异常
  5. 如果这种模式经常出现,可以手动完成这项工作,并通过代码创建实现自动化。

  6. 原始答案,编辑OP后可能无效

    类似的东西:

    // get your value from the database (don't know what you use now):
    string value = lookupTable.GetById(12345).Text;
    if(value == "x" || value == "y") 
    {
        // do your thing
    } 
    

    但接下来我对你当前的代码做了很多考虑,但是你没有多少代码。

    编辑:你问是否应该在数据库的值发生变化时更改代码。不,不需要。每次运行代码时,都会从数据库中检索值,并且不会出现问题。

答案 5 :(得分:0)

取决于您与之比较的不同值。如果是一个或两个,那么去一个头并使用if语句和等号。

不要使用大量if语句。最好使用switch语句或Dictionary来查找可接受的值。

答案 6 :(得分:0)

对于字符串,有一个Equals方法,您应该将其用于比较,例如

if(value.Equals(stringToCompareTo)){}

该方法有一个重载,它从StringComparison枚举中获取一个值,所以如果你想在你的比较中忽略这种情况,你会做类似的事情

if(value.Equals(stringToCompareTo,StringComparison.OrdinalIgnoreCase)){}

答案 7 :(得分:0)

将该字符串存储在配置

if(VALUE_FROM_DATABASE == ValueFromConfig) //...然后这样做