在List<>中找到一个值

时间:2013-03-16 09:55:28

标签: c# bindingsource

当我想在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)
    {
    }
}

对我来说有什么解决方案吗?因为当我试图找到字符串值时,这适用于我。

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

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

当然返回false(因为对象有不同的类型)。将文本解析为浮动而使用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();
     }
}

BTW要小心使用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)));
}

如您所见,您可以在此处传递任何对象。但只有当传递的对象也浮动时才会进行比较。

答案 1 :(得分:0)

首先,你不应该抓住Exception!代替ArgumentNullExceptionOverflowExceptionFormatException或使用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();