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