此函数始终返回null。 sString是一个带有字符串“Name”和字符串“Value”值的类。不要问我为什么不使用常规字符串 - 这很复杂。这是我的功能:
static string Get_sString(string VarName, ref List<sString> VarList)
{
foreach (sString TestsString in VarList)
{
if (TestsString.Name == VarName)
{
return TestsString.Name;
}
}
return null;
}
它应该返回与VarName具有相同Name值的实例,除了if语句始终为false 之外,它都可以工作。我无法弄清楚为什么。我实际上有一个几乎相同的类,叫做sDecimal,唯一的区别是Value属性是十进制,而不是字符串。 Get_sDecimal()与此完美匹配,Get_sDecimal()和Get_sString()之间的唯一区别是测试sDecimal和测试sString。 的谢谢!
编辑: 这是sString类。
class sString
{
public string Name;
public string Value;
/// <summary>
/// String Value variables that may have the same name.
/// </summary>
/// <param name="n">Internal name of variable.</param>
/// <param name="v">Value of variable.</param>
public sString(string n, string v)
{
Name = n;
Value = v;
}
}
编辑:这里有一些输出代码(和输出)来清理。
static string Get_sString(string VarName, ref List<sString> VarList)
{
foreach (sString TestsString in VarList)
{
Console.WriteLine("Looking for: " + VarName);
Console.WriteLine("Comparing with: " + TestsString.Name);
if (TestsString.Name == VarName)
{
Console.WriteLine("Match!");
return TestsString.Name;
}
}
return null;
}
这是输出:
Looking for: Q Comparing with: Q
编辑:我在列表中添加了几个变量。这是新的输出:
Looking for: Q Comparing with: Q Looking for: Q Comparing with: Z Looking for: Q Comparing with: VariableX
仍然没有匹配。
答案 0 :(得分:6)
代码从根本上起作用:
var list = new List<sString>
{
new sString("foo", "123"),
new sString("bar", "456")
};
var s = Get_sString("foo", ref list);
// = "foo", not null
不要误会我的意思 - 我会改变它的每一行。但它并不总是返回null
。
简要问题清单:
ref
Dictionary<string,string>
.Value
而不是.Name
答案 1 :(得分:2)
你确实意识到你已经基本上重新实现了LINQ:
return VarList.FirstOrDefault(x=> x.Name == VarName);
此外,您的sString
课程可能只是KeyValuePair<string,string>
<强>更新强>
实际上,你说:
它应该返回具有与VarName相同的Name值的实例
但它不会返回sString
个实例。相反,它会返回TestsString.Name
- 这与您开始时的字符串相同,但前提是它在列表中。所以基本上,这是一个复杂的“包含”检查。
答案 2 :(得分:1)
您应该使用String.Equals而不是== operator。
==运算符并不总是有效。 你可以在帖子Are string.Equals() and == operator really same?中找到样本。