0

此函数始终返回 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;
        }

这是输出:

寻找:Q
比较:Q

编辑:我在列表中添加了几个变量。这是新的输出:

寻找:Q
比较:Q
寻找:Q
比较:Z
寻找:Q
比较:变量X

仍然没有匹配。

4

3 回答 3

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
于 2013-06-01T04:47:17.523 回答
2

您确实意识到您已经基本上重新实现了 LINQ:

return VarList.FirstOrDefault(x=> x.Name == VarName);

你的sString班级也可能只是一个KeyValuePair<string,string>

更新

其实你

它应该返回与 VarName 具有相同 Name 值的实例

但它不返回sString实例。相反,它返回TestsString.Name- 与您开始使用的字符串相同,但前提是它在列表中。所以基本上,这是一个复杂的“包含”检查。

于 2013-06-01T04:45:52.743 回答
1

您应该使用 String.Equals 而不是 == 运算符。

== 运算符并不总是有效。您可以在线程中找到示例string.Equals() 和 == 运算符真的相同吗?.

于 2013-06-01T05:12:08.530 回答