c# - 表达式树可能不包含输出参数变量声明
问题描述
我正在使用具有新功能的 c# 7.3 创建一个类型应该是枚举的泛型方法。
我有这样的方法:
public static bool TryConvertToEnum<T>(this int value, out T returnedValue)
where T : struct, Enum
{
if (Enum.IsDefined(typeof(T), value))
{
returnedValue = (T)Enum.ToObject(typeof(T), value);
return true;
}
returnedValue = default;
return false;
}
它将尝试将 int 转换为特定的枚举。我试图在两种情况下使用这种方法。一个确实有效,而另一种则无效。
这是工作示例:
if (documentTypeId.TryConvertToEnum(out DocumentType returnedValue)
&& returnedValue == DocumentType.Folder)
{
//In this case it works fine
}
如果我尝试在 select 方法中使用它,它不起作用:
var comments = await DatabaseService.GetAll(filter)
.OrderByDescending(x => x.Id)
.ToPaginated(page)
.Select(x => new PostCommentViewModel
{
Id = x.Id,
Status = x.Status.TryConvertToEnum(out PostCommentStatusType returnedValue) ?
returnedValue : PostCommentStatusType.None //Here it does not work
}).ToListAsync();
在第二种情况下,它不允许构建项目。它给出了错误:
表达式树可能不包含输出参数变量声明
当我悬停时,RSharper 确实显示一个弹出窗口,说明:表达式树可能不包含输出参数变量声明
我对可能的部分有点困惑,不确定表达式树是否可以有参数...
有人知道为什么会这样吗?
解决方案
实际上,这似乎很容易解决。在应用选择功能之前,我只需要物化数据:(palmhand)。
var comments = DatabaseService.GetAll(filter)
.OrderByDescending(x => x.Id)
.ToPaginated(page)
.ToList()//Applied ToList here
.Select(x => new PostCommentViewModel
{
Id = x.Id,
Comment = x.Comment,
Created = x.Created,
Name = x.Name,
ParentId = x.ParentId,
PostId = x.PostId,
Status = x.Status.TryConvertToEnum(out PostCommentStatusType returnedValue) ?
returnedValue : PostCommentStatusType.None
}).ToList();
推荐阅读
- android - app:packageProductionDebug 任务占用 70% 的构建时间是否正常?
- sql - Azure SQL 上的 sql 选择查询中的参数是否存在问题?
- dart - 为颤振小部件的高度设置动画
- python - Python Asynio:无法运行并行异步协同程序
- php - 恢复由 ajax 传递给 php 的变量的问题
- android - 在 Firestore 中阅读用户未阅读的信件
- java - 如果条件基于 Activeprofile
- python - 关于小说语料库的Doc2vec:如何为小说的每个句子分配一个标签作为句子的ID,一个标签作为书的ID?
- ionic-framework - 面临调用服务离子应用程序CORB的问题
- clickhouse - 如何替换数组中的元素?