Array.Find()没有指定返回值

时间:2015-05-09 23:02:02

标签: c# arrays

我试图使用Array.Find()从结构数组中返回一个结构,并将其分配给名为Result的结构。但是,Result的值永远不会从null更改(我通过调试器运行了两次)。我的代码发布在下面,有人可以帮助我吗?提前谢谢。

public void button_Click(object sender, EventArgs e)
{
    string formName = textBoxName.Text;
    Info Result = Array.Find<Info>(Data, p => p.Name == formName);
    textBoxHeight.Text = Result.Height;
}

我正在尝试搜索名为Info[]的结构数组(Data),其元素为x,其中Info[x].Name与输入到另一个文本框中的值相同。

调试器显示它设法找到该元素,但该元素从未分配给Result。

1 个答案:

答案 0 :(得分:0)

当您使用struct Array.Find时,即使它无法在Data中找到一个条目,也会返回一个非null对象 - 如果您深入了解此对象的属性,您将看到它的内部属性是空的。这可能是你所看到的吗?如果从使用struct转换为类,则result将按预期返回null。

如果情况无关紧要,我会使用equals()和不变的案例查找。这样,在输入 test TEsT tEsT Test 的Data中的项目>:使用现有代码,必须完全 Test 才能找到它。

Info Result = Array.Find<Info>(Data, p => p.Name.Equals(formName, StringComparison.InvariantCultureIgnoreCase));

如果用户碰巧错误地添加了一些空格,您也可以删除空格:

Info Result = Array.Find<Info>(Data, p => p.Name.Equals(formName.Trim(), StringComparison.InvariantCultureIgnoreCase));

您也可以使用LINQ。在我看来,它看起来更干净。只需确保在代码顶部添加对LINQ的引用:

using System.Linq;

Info Result = Data.SingleOrDefault(p => p.Name.Equals(formName.Trim(), StringComparison.InvariantCultureIgnoreCase));