C# 要缩短此代码吗

C# 要缩短此代码吗,c#,.net,if-statement,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 ; } 已编辑 其中单元格TillDate属于DataGridViewDateTimeCell 我

我有这个密码

foreach (DataGridViewRow dgr in DataGridView1.Rows)
{
    if(dgr.Cells["TillDate"].Value != null )
    dgr.Cells["dgColTillDateCalculate"].Value = 
      (DateTime)dgr.Cells["TillDate"].Value ;
} 
已编辑 其中单元格
TillDate
属于DataGridViewDateTimeCell 我想把foreach循环中的条件代码缩短为一行,有什么方法可以这样做吗

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

做任何事时我应该做什么请建议更有效的方法

我认为您的原始代码是完美的,您不应该更改它。无论如何,用
dgr.Cells[“dgcoltildatecalculate”].Value
替换
doNothing
,这样它就会恢复其原始值。

我认为您的原始代码是完美的,您不应该更改它。无论如何,用
dgr.Cells[“dgcoltildatecalculate”].Value替换
doNothing
,这样它将返回其原始值。

这是:

dgr.Cells["dgColTillDateCalculate"].Value = 
dgr.Cells["TillDate"].Value == null 
? (DateTime?)null
: dgr.Cells["TillDate"].Value;
但是,由于您正在将值分配给
dgr.Cells[“dgColTillDateCalculate”].value
,请检查分配是否需要
null
值。

这里是:

dgr.Cells["dgColTillDateCalculate"].Value = 
dgr.Cells["TillDate"].Value == null 
? (DateTime?)null
: dgr.Cells["TillDate"].Value;
但是,由于您正在将值分配给
dgr.Cells[“dgColTillDateCalculate”].value
,请检查分配是否需要
null
值。

尝试此操作

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

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

您可以使用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;
        }
foreach(DataGridView1.Rows.Cast()中的DataGridViewRow dgr,其中(r=>r.Cells[“TillDate”].Value!=null))
{
dgr.Cells[“dgColTillDateCalculate”].Value=(DateTime)dgr.Cells[“TillDate”].Value;
}

您可以使用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;
        }
foreach(DataGridView1.Rows.Cast()中的DataGridViewRow dgr,其中(r=>r.Cells[“TillDate”].Value!=null))
{
dgr.Cells[“dgColTillDateCalculate”].Value=(DateTime)dgr.Cells[“TillDate”].Value;
}

当值为null时,它给出错误,因为它不能将null转换为DateTime值,然后使用null。当值为null时,它给出错误,因为它不能将null转换为DateTime值,然后使用null。当值为null时,它给出异常“对象引用未设置为对象的实例”.@Co.Aden此代码也适用于您编辑的问题。当值为null时,会出现异常“对象引用未设置为对象的实例”。@Co.Aden此代码也适用于您编辑的问题。这是我的建议,不是复制。这是我的建议,不是复制。