1

当我想在其中找到值List<>但我没有得到整数值时,我遇到了问题。这是我想在 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)
    {
    }
}

对我来说有什么解决方案。因为当我尝试查找字符串值时,这对我有用。

提前致谢。

4

2 回答 2

1

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

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

当然返回 false (因为对象有不同的类型)。将文本解析为浮动并使用浮动过滤掉 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 时要小心。以下是为浮点数(和其他类型)实现 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)));
}

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

于 2013-03-16T10:13:00.897 回答
0

首先,你不应该抓到Exception!Catch 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();
于 2013-03-16T10:08:30.610 回答