gpt4 book ai didi

c# - 具有匿名和动态类型抛出错误的方法

转载 作者:行者123 更新时间:2023-11-30 22:16:00 24 4
gpt4 key购买 nike

以下代码遍历 resultSet 并填充 SomeType 的列表 a。resultSet 本身是具有两个属性的匿名类型

var resultSet = SomeCollection.Select(x => new {
FirstProp = x,
SomeMembers = SomeLinkCollection.Where(l => l.SomeId == x.SomeId)
.Select(l => AnotherCollection[l.Id])
});

var result = new List<SomeType>();
foreach (var currentGroup in resultSet) {
result.Add(new SomeType {
Prop1 = currentGroup.Item.Id,
Prop2 = currentGroup.Item.Name,
Prop3 = currentGroup.SomeMembers.OrderBy(x => x.Name)
});
}

为了取消设置新的 Sometype 实例,我使用动态类型创建了一个映射器类/接口(interface)来拆分责任并使用依赖注入(inject):

public class SomeMapper : ISomeMapper {
public List<SomeType> Map(dynamic resultSet) {
return resultSet.Select(new SomeType {
Prop1 = currentGroup.Item.Id,
Prop2 = currentGroup.Item.Name,
Prop3 = ((IEnumerable<AnotherType>)resultSet.SomeMembers)
.OrderBy(x => x.Name)
});
}
}

所以上面的代码变成了:

return resultSet.Select(SomeMapper.Map);

错误

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable>' to 'System.Collections.Generic.List'. An explicit conversion exists (are you missing a cast?)

我尝试了一些显式转换为 SomeType 的技巧,但它在运行时失败了

return (List<SomeType>)groupSet.Select(statusGroupMapper.Map);

Unable to cast object of type
'WhereSelectListIterator2[AnotherType,System.Collections.Generic.List1[SomeType]]' to type 'System.Collections.Generic.List`1[SomeType]'.

最佳答案

您需要创建一个结果列表。

只需添加 .ToList()在你的表达之后:

public class SomeMapper : ISomeMapper {
public List<SomeType> Map(dynamic resultSet) {
return resultSet.Select(new SomeType {
Prop1 = currentGroup.Item.Id,
Prop2 = currentGroup.Item.Name,
Prop3 = ((IEnumerable<AnotherType>)resultSet.SomeMembers).OrderBy(x => x.Name)
}).ToList();
}
}

.Select(...)返回 IEnumerable<T> , 不是 List<T> ,所以这与使用此方法时遇到的问题类型完全相同:

public string Name()
{
return 10; // int
}

你调用的时候也有问题,不要这样:

return (List<SomeType>)groupSet.Select(statusGroupMapper.Map);

只需这样做:

return statusGroupMapper.Map(groupSet);

关于c# - 具有匿名和动态类型抛出错误的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17698867/

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