想要缩短此代码

时间:2014-01-02 06:00:08

标签: c# .net if-statement

我有这个代码

foreach (DataGridViewRow dgr in DataGridView1.Rows)
{
    if(dgr.Cells["TillDate"].Value != null )
    dgr.Cells["dgColTillDateCalculate"].Value = 
      (DateTime)dgr.Cells["TillDate"].Value ;
} 

EDITED 单元格TillDate是DataGridViewDateTimeCell的位置 我想在foreach循环中将这段条件的代码缩短为一行,有没有办法像

那样做
dgr.Cells["dgColTillDateCalculate"].Value = 
  (DateTime)dgr.Cells["TillDate"].Value == null 
  ? doNothing 
  : dgr.Cells["TillDate"].Value;

我应该在doNothing做些什么,请提出更有效的方法..

4 个答案:

答案 0 :(得分:2)

试试这个

foreach (DataGridViewRow dgr in DataGridView1.Rows)
 {
    dgr.Cells["dgColTillDateCalculate"].Value = 
          (DateTime)dgr.Cells["TillDate"].Value == null 
          ? (DateTime?)null 
          : dgr.Cells["TillDate"].Value;   
 }

答案 1 :(得分:2)

您可以使用linq将if移动到foreach中,这样可以简化内部线路:

        foreach (DataGridViewRow dgr in DataGridView1.Rows.Cast<DataGridViewRow>().Where(r => r.Cells["TillDate"].Value != null))
        {
            dgr.Cells["dgColTillDateCalculate"].Value = (DateTime)dgr.Cells["TillDate"].Value;
        }

答案 2 :(得分:1)

这是:

dgr.Cells["dgColTillDateCalculate"].Value = 
dgr.Cells["TillDate"].Value == null 
? (DateTime?)null
: dgr.Cells["TillDate"].Value;

但是,由于您要为dgr.Cells["dgColTillDateCalculate"].Value分配值,请检查分配是否需要null值。

答案 3 :(得分:0)

我认为您的原始代码是完美的,您不应该更改它。无论如何,将doNothing替换为dgr.Cells["dgColTillDateCalculate"].Value,以便它恢复原始值。