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此代码也适用于您编辑的问题。这是我的建议,不是复制。这是我的建议,不是复制。