我无法理解为什么我的简单var list = new List<TempFieldList>();
foreach (DataRow row in ListTable.Rows)
{
list.Add(new TempFieldList{
field1 = row["Field1"].ToString(),
field2 = row["Field2"].ToString()
});
}
foreach (DataRow row in ListTable.Rows)
{
var result = list.FirstOrDefault(x => x.field2 == row["Field1"].ToString());
//row.Dump();
if(result != null )
ResultTable.Rows.Add("");
else
ResultTable.Rows.Add(row["Field1"].ToString(), null);
}
相等测试返回false。
代码是:
String
结果是:
boolean isDevelopment() {
//config.project_stage is set to "Development"
String cfgvar = "${config.project_stage}"
String comp = "Development"
assert cfgvar.equals(comp)
}
如果我这样做,我也会弄错:
assert cfgvar.equals(comp)
| | |
| false Development
Development
答案 0 :(得分:4)
toString()
没有必要。最有可能你有一些尾随
config.project_stage
中的空格,因此它们也会保留在cfgvar
。
comp
没有多余的空格,从代码中可以看到。
最初,"${config.project_stage}"
表达式为GString
类型,但由于您将其分配给键入为String
的变量,
它被强制执行到String
,因此toString()
不会改变任何内容。
由您决定是使用equals(...)
还是==
。
实际上,Groovy默默地将第二种形式翻译成第一种形式。
所以,总而言之,你可以写assert cfgvar.trim() == comp
。
你也可以在开头修剪cfgvar
,写下:
cfgvar = "${config.project_stage}".trim()
然后不要担心任何尾随空格。
答案 1 :(得分:2)
你检查过尾随空格吗?至少你的输出是第一个Development
的输出。比较这些字符串时尝试.trim()(也可能是.toLowerCase())
请记住:Groovy中的 .equals()
是一个指针比较。想要做的是==
。是的,与Java中定义的相反,但Groovy定义更有意义: - )
更新:查看@tim_yates的评论 - 我将.equals()
与.is()
混合
答案 2 :(得分:1)
您所比较的对象不是String
而是GString
,请尝试:
cfgvar.toString().equals(comp)
但是你的代码适用于groovy v.2.4.5。你使用的是哪个版本?