我试图使用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。
答案 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));