【问题标题】:Saving output from "If statement" c#保存“If语句”c#的输出
【发布时间】:2021-09-03 00:42:30
【问题描述】:

我有这样的条件:

List<HWSRunSession> session = new List<HWSRunSession>();
foreach (var item in fileInfo)
{
    if(_db.HWSRunSessions.Where((x) => x.TransferredZipName == item.Name 
    && DateTime.Now.Subtract(x.AddedDate).TotalDays >= _ExpirationDays) == null) {
     bla bla...
    }        
}

但我想使用“out”关键字将条件中检索到的列表保存到我的变量session。有点像:

List<HWSRunSession> session = new List<HWSRunSession>();
foreach (var item in fileInfo)
{
    if(_db.HWSRunSessions.Where((x) => x.TransferredZipName == item.Name 
    && DateTime.Now.Subtract(x.AddedDate).TotalDays >= _ExpirationDays), out session == null) {



    }
}

这可能吗?如果可以,怎么做?

【问题讨论】:

  • if 不支持 out 参数,或者更确切地说,除了单个条件之外的任何其他参数。您想要这个有什么特别的原因吗?
  • 不要太复杂。 1.获取列表,2.应用条件。
  • 您可以简单地分配给一个变量并检查它是否有null

标签: c# conditional-statements out


【解决方案1】:

最具可读性和可维护性的解决方案是将结果存储在一个变量中,然后在条件下测试这个变量:

var session = _db.HWSRunSessions
    .Where((x) => x.TransferredZipName == item.Name 
       && DateTime.Now.Subtract(x.AddedDate).TotalDays >= _ExpirationDays)
    .FirstOrDefault();
if(session == null)
{
  // session is null
}
else
{
  // do something with session
}

如果您绝对必须在表达式中分配一个变量,这是可能的。但它使代码更难阅读,更容易漏掉错误:

Session session = null;
if ((session = _db.HWSRunSessions
    .Where((x) => x.TransferredZipName == item.Name 
        && DateTime.Now.Subtract(x.AddedDate).TotalDays >= _ExpirationDays)
    .FirstOrDefault()) == null)
{
  // session is null
}
else
{
  // do something with session
}

【讨论】:

  • 我在评论里写过同样的东西
  • 也许我遗漏了一些东西,但这实际上应该永远为空。假设HWSRunSessionsDBSet&lt;T&gt;Where 应该总是返回IQueryable。我错了吗?
  • @Fildor 是的,你是绝对正确的。 Where 将始终 (99% ;)) 返回非空值。 OP 中可能缺少另一个 .FirstOrDefault() 调用
  • 解决方案还可以,但反正条件代码很奇怪,我会写一个方法返回会话值并保持干净
  • @Windgate 同意,一种方法使条件更具可读性。问题是关于从 if 条件中将表达式的值存储在变量中。表达式可以是任何东西(单个方法调用、LINQ、复杂的算术表达式等)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
相关资源
最近更新 更多