【问题标题】:How not to include null values in min如何在 min 中不包含空值
【发布时间】:2016-11-18 07:49:16
【问题描述】:

我的表单中有一个包含许多列的 DataGridView。在其中的四列中,我想使用 Min() 获得最低值。但是,通常有一些列具有空值。当它尝试比较四个值时,我不希望包含 null。

问题是,如果其中一列为空,当我希望它返回最小值时,它总是返回空。有什么想法吗?

foreach (DataGridViewRow row in dgv_csv.Rows)
{
    mfn_new[i] = row.Cells[21].Value.ToString();
    mfn_used[i] = row.Cells[22].Value.ToString();
    fba_new[i] = row.Cells[23].Value.ToString();
    fba_used[i] = row.Cells[24].Value.ToString();

    var list = new[] { mfn_new[i], mfn_used[i], fba_new[i], fba_used[i] };
    string min = list.Min();
    MessageBox.Show(min);

    i++;
}

【问题讨论】:

  • 问题是,如果其中一列为null,当我希望它返回最小值时,它总是返回null 你确定。我认为只有当 all 值为 null 时它才会返回 null。您是否将 null 与空字符串混合在一起?
  • 例如,var test = new [] { "5", null, "3", "8", null }.Min(); 返回“3”

标签: c# datagridview min


【解决方案1】:
list.Where(item => item != null).Min()

但是你为什么将你的数字表示为string?我假设您正在寻找 Min 的数字,而不是字符串 - 考虑更改类型

如果.Valuenull,那么以下行mfn_new[i] = row.Cells[21].Value.ToString(); 可能会抛出NullReferenceException,因此稍后检查它是否与null 无关。


更新问题 ID 后建议:

mfn_new[i] = row.Cells[21].Value?.ToString();
....

list.Where(item => item != string.Empty).Min()

【讨论】:

  • 我正在使用 int 达到这一点。你从哪里得到“项目”的?我试过这个:string min = list.Select(item => item != null).Min();它说一个错误“不能隐式地将类型'bool'转换为'string'。对不起,我是一个初学者程序员
  • 谓词的入参。 Check this
  • 谢谢你,成功了。您解决了我在过去 2 小时内试图解决的问题 :)
  • 我做对了吗?我在向上/向下投票按钮的正下方打勾
  • @Bjorn - 是的 :) 上/下投票是今天这是一个好的/有用的答案(每个问题可以有几个答案),然后用 V 标记只能是一个每个问题的答案
猜你喜欢
  • 1970-01-01
  • 2012-09-09
  • 2013-08-08
  • 2012-12-04
  • 2019-07-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多