gpt4 book ai didi

c# - 将接口(interface)作为参数传递给扩展方法

转载 作者:太空狗 更新时间:2023-10-29 23:59:38 25 4
gpt4 key购买 nike

我已经使用扩展方法来扩展 html 助手来制作 RSS 转发器:

    public static string RSSRepeater(this HtmlHelper html, IEnumerable<IRSSable> rss)
{
string result="";

foreach (IRSSable item in rss)
{
result += "<item>" + item.GetRSSItem().InnerXml + "</item>";
}

return result;
}

所以我让我的业务对象之一实现 IRSSable,并尝试将其传递给 HTML 帮助器。但我似乎无法让它发挥作用,我已经尝试过:

<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "") as IEnumerable<IRSSable>) %>

编译正常,但传递了 null

<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "")) %>

Intellisense 提示无法将 IEnumerable 问题传递给 IEnumberable IRSSable

  • 那么你是怎么做到的呢?我正在调用的那个方法肯定会返回 IEnumberable<Issue>并且 Issue 明确地实现了 IRSSAble

最佳答案

啊...尝试:

 public static string RSSRepeater<T>(this HtmlHelper html, IEnumerable<T> rss)
where T : IRSSable
{
...
}

这应该允许您传递实现 IRSSable 的任何序列 - 并且泛型类型推断应该意味着您不需要指定 T(如Issue) 你自己 - 编译器会处理它。

顺便一提 - avoid concatenation here ; StringBuilder 更可取:

    StringBuilder result = new StringBuilder();

foreach (IRSSable item in rss)
{
result.Append("<item>").Append(item.GetRSSItem().InnerXml).Append("</item>");
}

return result.ToString();

关于c# - 将接口(interface)作为参数传递给扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325561/

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