gpt4 book ai didi

c# - 表达式树不能包含输出参数变量声明

转载 作者:行者123 更新时间:2023-12-05 04:04:11 25 4
gpt4 key购买 nike

我正在使用具有新功能的 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
}

如果我尝试在选择方法中使用它,它不起作用:

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();

在第二种情况下,它不允许构建项目。它给出了错误:

An expression tree may not contain an out argumentvariable declaration

当我悬停时,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();

关于c# - 表达式树不能包含输出参数变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53000444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com