在列表<>中查找值
本文关键字:查找 列表 | 更新日期: 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(和其他类型)
实现Equalspublic 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
, OverflowException
和FormatException
,或者使用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();