gpt4 book ai didi

c# - 尝试转换匿名对象 Razor 时出错

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:39 25 4
gpt4 key购买 nike

我正在尝试转换一个匿名对象数组,其中每个对象如下所示:

new {type="internal",title="Linktitle",target="_blank",link="http://www.google.se"}

我已经声明了一个类“Link”,匿名对象应该被转换到它

class Link{
public string type {get;set;}
public string target {get;set;}
public string title {get;set;}
public string link {get;set;}
}

现在我正在尝试像这样转换对象

List<Link> links = Model.relatedLinks.Select(l => new Link{type=l.type,target=l.target,title=l.title,link=l.link}).ToList();

然后我得到错误

Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type

我找到了 this有关如何转换匿名对象的页面,但我以相同的方式进行操作。还是我错过了什么?

最佳答案

如果relatedLinks本身是一个动态值,你有两个问题:

  • 已报告的 lambda 表达式部分
  • 不能对动态值调用扩展方法(作为 扩展方法)。这会同时影响 SelectToList方法。

您可以通过转换 lambda 表达式来解决第一个问题。您可以通过调用 Enumerable.Select 解决第二个问题直接:

// Note: don't use var here. We need the implicit conversion from
// dynamic
IEnumerable<Link> query = Enumerable.Select(Model.relatedLinks,
(Func<dynamic, Link>) (l => new Link {
type = l.type,
target = l.target,
title = l.title,
link = l.link } );
var links = query.ToList();

或者为了格式化:

Func<dynamic, Link> projection = l => new Link { 
type = l.type,
target = l.target,
title = l.title,
link = l.link };
IEnumerable<Link> query = Enumerable.Select(Model.relatedLinks, projection);
var links = query.ToList();

如果Model.relatedLinks已经是IEnumerable<dynamic> (或类似的东西)然后你可以打电话 Select作为扩展方法 - 但你仍然需要有一个强类型的委托(delegate)。因此,例如,后一个版本将变为:

Func<dynamic, Link> projection = l => new Link { 
type = l.type,
target = l.target,
title = l.title,
link = l.link };
IEnumerable<Link> query = Model.relatedLinks.Select(projection);
var links = query.ToList();

关于c# - 尝试转换匿名对象 Razor 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14305099/

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