私はそのようなメソッド宣言を持つインターフェースの具体的なクラス実装を持っています....
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 in C:\Users\andrew.knightley\git\FAST\src\ContentManagement\FantasyLeague.Web.Mvc\ControllerBase.cs:line 290}
基本的に、C# はインターフェイス メソッドのシグネチャをディクショナリとして解析しようとしているように見えるため、エラーが発生しますが、具体的な実装を実行しようとしているはずです。ここで何が起こっているか知っている人はいますか?インターフェイスと具象型、およびすべての組み合わせにキャストしようとしましたが、まだありません。インターフェイスに関するすべての MSDN の内容を読み直しました。記事によると、ここには何も異常はありません。
よろしくお願いします。