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 を返します (オブジェクトの型が異なるため)。代わりにテキストを解析して float にし、float を使用して napstabs リストを除外します。

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)));
}

ご覧のとおり、ここでは任意のオブジェクトを渡すことができます。ただし、渡されたオブジェクトも float の場合にのみ比較が行われます。

于 2013-03-16T10:13:00.897 に答える
0

まず第一に、あなたはキャッチするべきではありませんException!をキャッチArgumentNullExceptionし、代わりに使用するか、次を使用しOverflowExceptionます。FormatExceptionfloat .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 に答える