我使用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();
在第二种情况下,它不允许构建项目。
它给出了一个错误:表达式树不能包含out参数
变量声明
当我悬停时,RSharper会显示一个弹出窗口,说明:
表达式树不能包含out参数变量声明
可以
,不确定表达式树是否可以有out参数。。。