【问题标题】:Conditional assignment using delegate使用委托的条件赋值
【发布时间】:2011-10-03 11:29:23
【问题描述】:

我想分配给这样的数据表。

如果数据表为空,则创建一个新数据表,否则清除数据表

我写的代码

datatable= (datatable== null) ? 
   new DataTable() :  
  delegate(){datatable.Clear(); return datatable;});

使用委托或匿名方法如何实现这一点?尽可能使用最短的代码。

【问题讨论】:

  • 我知道这不是您问题的答案,但请记住,最短的代码并不总是最好的代码。在这种情况下,您可能会更好地使用普通的 if 语句,这样您的代码就更易读也更容易理解。
  • 我只是在学习代表。想知道这是否可以通过代表来实现!(仅供学习)

标签: c# delegates anonymous-methods


【解决方案1】:

可以使用委托,但我真的不会。我只是使用:

if (dataTable == null)
{
    dataTable = new DataTable();
}
else
{
    dataTable.Clear();
}

很多在做什么方面更清楚了,IMO。

这是代表版本的所有丑陋:

dataTable = dataTable == null ? new DataTable() :
    ((Func<DataTable>)(() => { dataTable.Clear(); return dataTable; }))();

【讨论】:

  • @Zain:我知道那条评论是什么意思。编辑:好的,现在我已经为自己编译了...这 不是 异常,它是编译时错误。这是它的方法名称 expected,而不是 excepted。巨大的差异。我现在已经修好了 - 需要更多的括号......
  • 我认为“例外”是“预期的”,但仍然不知道你的意思@Zain
  • @Smudge202:这意味着他试图编译我的代码,但没有编译。他本来可以更清楚的......
  • 你能解释一下你代码中最后两个大括号 () 是做什么的吗?
  • 我可以 Zain,但可能不会很好地发表评论。三元运算符的 false 部分是一个委托... Func。如果你不添加最后两个括号,那么你返回的是一个委托。委托不会转换为数据表,您需要的是委托的结果。通过添加括号,您可以告诉编译器执行委托,而委托又会返回一个数据表。
【解决方案2】:

你的意思可能是这样的?

Func<DataTable, DataTable> datatable = (n => {
    if (n == null)
        n = new DataTable();
    else
        n.Clear();
    return n; });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2013-01-06
    相关资源
    最近更新 更多