当我想在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)
{
}
}
对我来说有什么解决方案吗?因为当我试图找到字符串值时,这适用于我。
提前致谢。
答案 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
!代替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();