qui*_*qui 4 c# asp.net-mvc extension-methods interface
我使用扩展方法扩展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;
}
Run Code Online (Sandbox Code Playgroud)
所以我让我的一个业务对象实现IRSSable,并尝试将其传递给HTML帮助器.但我似乎无法使它工作,我尝试过:
<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "") as IEnumerable<IRSSable>) %>
Run Code Online (Sandbox Code Playgroud)
编译正常,但传递null
<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "")) %>
Run Code Online (Sandbox Code Playgroud)
Intellisense抱怨无法将IEnumerable问题传递给IEnumberable IRSSable
IEnumberable<Issue>肯定会返回并且问题肯定会实现IRSSAbleMar*_*ell 14
啊......试试:
public static string RSSRepeater<T>(this HtmlHelper html, IEnumerable<T> rss)
where T : IRSSable
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后,这应该允许您传递实现的任何序列IRSSable- 并且泛型类型推断应该意味着您不需要自己指定T(as Issue) - 编译器将处理它.
顺便说一下 - 避免在这里连接 ; StringBuilder最好是:
StringBuilder result = new StringBuilder();
foreach (IRSSable item in rss)
{
result.Append("<item>").Append(item.GetRSSItem().InnerXml).Append("</item>");
}
return result.ToString();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2426 次 |
| 最近记录: |