如何创建一个通用方法并创建类型的实例

时间:2010-03-15 23:11:14

标签: c# generics html-helper

我想创建一个帮助方法,我可以想象它有一个类似于此的签名:

public static MyHtmlTag GenerateTag<T>(this HtmlHelper htmlHelper, object obj)
{
    // how do I create an instance of MyAnchor? 
    // this returns MyAnchor, which has a MyHtmlTag base
}

当我调用该方法时,我想指定一种MyHtmlTag,例如MyAnchor,例如:

<%= Html.GenerateTag<MyAnchor>(obj) %>

<%= Html.GenerateTag<MySpan>(obj) %>

有人可以告诉我如何创建此方法吗?

另外,创建我指定类型的实例涉及什么? Activator.CreateInstance()

谢谢

戴夫

3 个答案:

答案 0 :(得分:2)

您使用Activator.CreateInstance<T>

public static MyHtmlTag GenerateTag<T>(this HtmlHelper htmlHelper, object obj)
{
    T value = Activator.CreateInstance<T>();
    // Set properties on value/ use it/etc
    return value;
}

答案 1 :(得分:1)

MvcContrib中现有的功能可能需要检出“FluentHtml”。它看起来像这样:

<%=this.TextBox(x => x.FirstName).Class("required").Label("First Name:")%>
<%=this.Select(x => x.ClientId).Options((SelectList)ViewData["clients"]).Label("Client:")%>
<%=this.MultiSelect(x => x.UserId).Options(ViewModel.Users)%>
<%=this.CheckBox("enabled").LabelAfter("Enabled").Title("Click to enable.").Styles(vertical_align => "middle")%>

答案 2 :(得分:0)

您需要将new()的通用约束添加到T,然后执行以下操作:

public static MyHtmlTag GenerateTag<T> (this HtmlHelper helper, T obj) where T : MyHtmlTag, new()
{
    T val = new T ();
    return val;
}