gpt4 book ai didi

c# - 将匿名类型添加到 Enumerable

转载 作者:太空狗 更新时间:2023-10-30 01:06:50 26 4
gpt4 key购买 nike

我有下面的代码示例,我想在其中 prepend源参数前面的一些文本,可以是 ISiteIFactory 类型,通过 MoreLinq extension 在 MVC 下拉列表中使用.此函数用于返回序列化为 JSON 的列表的 Controller 操作,以便它可以使用一些下拉级联动态加载,否则我会在 View 模型中单独完成此操作。

我想知道是否有一种方法可以在不必创建具体的 ListItem 类的情况下执行类似于下面的操作,我的示例显示了我如何使用 as IListItem 但我知道这不会编译。

目前我的 Controller 对我的模型的任何具体类都没有概念,我有点想保持这种状态,但我不确定我是否确实需要创建一个 ListItem 的实例来完成这项工作,或者如果有人有其他建议?

我对泛型协变和逆变的了解有限,如果这在这里很重要?谢谢

    public interface IListItem
{
int Id { get; set; }
string Name { get; set; }
}

public interface ISite : IListItem
{
int CountryId { get; set; }
}

public interface IFactory : IListItem
{
int SiteId { get; set; }
}

public interface IResource
{
int Id { get; set; }
string Name { get; set; }
int ContentID { get; set; }
string Text { get; set; }
int LanguageID { get; set; }
string LanguageCode { get; set; }
int Priority { get; set; }
}

private IEnumerable<IListItem> PrependSelectionResource(IEnumerable<IListItem> source, string languageCode)
{
if(source == null || source.Count() == 1)
return source; // don't bother prepending the relevant resource in these cases

try
{
// will throw an exception if languageCode is null or blank
var resource = _resourceRepository.GetByNameAndLanguageCode(
"Prompt_PleaseSelect",
languageCode);

if(resource == null)
return source;

// prepend the "Please Select" resource to the beginning of the source
// using MoreLinq extension
return source.Prepend(new {
Id = 0,
Name = resource.Text ?? ""
} as IListItem);
}
catch {
return source;
}
}

最佳答案

不幸的是,您无能为力。您必须将实现 IListItem 接口(interface)的类的具体实例传递给 Prepend 方法。

如果您担心在应用程序的其他地方公开实现,您可以为名为 PlaceholderListItem 的文件创建一个本地实现并改用它。

关于c# - 将匿名类型添加到 Enumerable<TSource>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14174100/

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