我有一个接口的具体类实现,它有一个像这样的方法声明......
public interface IControllerContent
{
IEnumerable<KeyValuePair<string, string>> LocalResource();
}
public class BaseControllerContent : IControllerContent
{
public IEnumerable<KeyValuePair<string, string>> LocalResource()
{
ResourceSet resourceSet =
ResourceManager.GetResourceSet(new CultureInfo(this.Tenant.Locale), true, false);
IDictionaryEnumerator dictionaryEnumerator = resourceSet.GetEnumerator();
while (dictionaryEnumerator.MoveNext())
{
//only string resources
var value = dictionaryEnumerator.Value as string;
if (value != null)
{
var key = (string)dictionaryEnumerator.Key;
yield return new KeyValuePair<string, string>(key, value);
}
}
}
}
一切都相当直截了当。声明一个接口并从一个具体类实现。但是,当我尝试调用具体类的 LocalResource 方法时,我得到了一个异常。
public T Build<T>() where T : class, IControllerContent
{
var controllerContent = Activator.CreateInstance(typeof(T)) as T;
try
{
**controllerContent.CDict = (Dictionary<string, string>) controllerContent.LocalResource();**
controllerContent.CDict = (Dictionary<string, string>) JsonReader<T>.Parse(this.Content);
return controllerContent;
}
catch (Exception ex)
{
throw new Exception();
}
}
尝试执行 LocalResource() 方法(上面突出显示)时发生异常。
{System.InvalidCastException:无法将“<LocalResource>d__0”类型的对象转换为“System.Collections.Generic.Dictionary`2[System.String,System.String]”类型。在 FantasyLeague.Web.Mvc.ControllerContentBuilder.BuildT 在 C:\Users\andrew.knightley\git\FAST\src\ContentManagement\FantasyLeague.Web.Mvc\ControllerBase.cs:line 290}
基本上,C# 似乎试图将接口方法签名解析为字典,因此出现错误,但它肯定应该尝试执行具体的实现。有人知道这里发生了什么吗?我尝试过转换为接口和具体类型以及所有组合,但它仍然没有。我已经重读了关于接口的所有 MSDN 资料,根据他们的文章,这里没有什么不寻常的地方。
提前谢谢了。