在列表<>中查找值

本文关键字:查找 列表 | 更新日期: 2023-09-27 18:04:06

当我想在List<>中找到值时,我有一个问题,但我没有得到整数值。这是我的代码,我想找到列表中的值。

private void txtnapsaserach_TextChanged(object sender, EventArgs e)
{
    try
    {
       //decimal find = decimal.Parse(txtnapsaserach.Text);
       if (decimal.Parse(txtnapsaserach.Text) > 0)
       {
       List<NapsaTable> _napsatabs = this.napsaTableBindingSource.List as List<NapsaTable>;
       this.napsaTableBindingSource.DataSource = 
        _napsatabs.Where(p =>p.NapsaRate.Equals(txtnapsaserach.Text)).ToList();
       }
    }
    catch (Exception Ex)
    {
    }
}

对我来说有解吗?因为当我试图找到字符串值时,这对我有效。

在列表<>中查找值

您正在比较string对象(txtnapsasearch的文本)与float对象(NapsaRate属性的值)在这里:

Where(p =>p.NapsaRate.Equals(txtnapsaserach.Text))

当然返回false(因为对象有不同的类型)。将文本解析为float,并使用float来过滤napsatabs列表:

private void txtnapsaserach_TextChanged(object sender, EventArgs e)
{
     float value;
     if (!float.TryParse(txtnapsaserach.Text, out value))
         return; // return if text cannot be parsed as float number
     if (value > 0)
     {
        var napsatabs = napsaTableBindingSource.List as List<NapsaTable>;
        napsaTableBindingSource.DataSource = 
            napsatabs.Where(p =>p.NapsaRate == value).ToList();
     }
}

顺便说一句,要小心使用Equals。下面是如何为float(和其他类型)

实现Equals
public override bool Equals(object obj)
{
    if (!(obj is float))
    {
        return false; // your case if obj is string
    }
    float f = (float) obj;
    return ((f == this) || (IsNaN(f) && IsNaN(this)));
}
如你所见,你可以在这里传递任何对象。

首先,你不应该抓住Exception !捕获ArgumentNullException, OverflowExceptionFormatException,或者使用float .TryParse:

private void txtnapsaserach_TextChanged(object sender, EventArgs e)
{
    float value = 0;
    if(float.TryParse(txtnapsaserach.Text, out value) && value > 0)
    {
        // your logic here
    {
}

你应该使用float,因为你要比较的属性也是float

你的逻辑应该更像这样:

List<NapsaTable> _napsatabs = this.napsaTableBindingSource.List as List<NapsaTable>;
this.napsaTableBindingSource.DataSource = _napsatabs.Where(p => p.NapsaRate == value).ToList();