保存“If语句”的输出c#

c#

我有一个这样的条件:

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...
    }        
}

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

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) {



    }
}

这是可能的,如果可以,如何?

回答

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

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
}

  • @Fildor yes, you are absolutely correct. `Where` will always (99% ;)) return non-null. Probably another `.FirstOrDefault()` call is missing from the OP

以上是保存“If语句”的输出c#的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>