0
我有以下类别:隐式转换类型问题
public class DictionaryBuilder<T> where T : IDictionary<string, object>, new()
{
private List<Tuple<string, object>> values_ = new List<Tuple<string, object>>();
public DictionaryBuilder<T> WithValue(string key, object obj)
{
values_.Add(Tuple.Create(key, obj));
return this;
}
public static implicit operator T(DictionaryBuilder<T> builder)
{
return builder.Build();
}
public T Build()
{
var dict = new T();
foreach (var value in values_)
{
dict.Add(value.Item1, value.Item2);
}
return dict;
}
}
public static class Admin
{
public static string IndexPath { get { return "Admin/Index"; } }
public static DictionaryBuilder<RouteValueDictionary> IndexRoute
{
get
{
return new DictionaryBuilder<RouteValueDictionary>()
.WithValue("controller", "Admin")
.WithValue("action", "Index");
}
}
}
而且它使用的,如:
@Html.RouteLink("Admim",
Admin.IndexRoute
.WithValue("id",3),
new DictionaryBuilder<Dictionary<string,object>>()
.WithValue("class","AdminRouteLink")
这是一个有点拗口,而泛型是阻碍意向一点。我想这样做:
public class RouteValues : DictionaryBuilder<RouteValueDictionary> { }
public class HtmlValues : DictionaryBuilder<Dictionary<string,object>> { }
public static class Admin
{
public static string IndexPath { get { return "Admin/Index"; } }
public static RouteValues IndexRoute
{
get
{
return new RouteValues()
.WithValue("controller", "Admin")
.WithValue("action", "Index");
}
}
}
@Html.RouteLink("Admim",
Admin.IndexRoute
.WithValue("id",3),
new HtmlValues()
.WithValue("class","AdminRouteLink")
不幸的是,我得到一个转换错误,我怕我不完全理解:
Cannot implicitly convert type
'ControllerActionExporter
.DictionaryBuilder<System.Web.Routing.RouteValueDictionary>'
to
'ControllerActionExporter.RouteValues'.
An explicit conversion exists (are you missing a cast?)
return new RouteValues()
.WithValue("controller", "Admin")
.WithValue("action", "Index"); //error occurs on this line
我在做什么错误,以及如何我是否纠正了这个问题?
我宁愿不必在我的所有视图页面上添加额外的使用条款,并使用类型系统,但是这样比较好,完全没有。谢谢。 – asawyer