説明が欲しいです。タイプ T のリストを取得して Delegate メソッドを実行する汎用クラスがありますが、クラスに IEnumerable を渡して、List、Dictionary などを処理できるようにしたいと考えています。
このコードを仮定すると:
public static class GenericClass<T>
{
public delegate void ProcessDelegate(ref IEnumerable<T> p_entitiesList);
public static void ExecuteProcess(ref IEnumerable<T> p_entitiesList, ProcessDelegate p_delegate)
{
p_delegate(ref p_entitiesList);
}
}
public static void Main()
{
GenericClass<KeyValuePair<string, string>.ProcessDelegate delegateProcess =
new GenericClass<KeyValuePair<string, string>.ProcessDelegate(
delegate (ref IEnumerable<KeyValuePair<string, string>> p_entitiesList)
{
//Treatment...
});
Dictionary<string, string> dic = new Dictionary<string, string>;
GenericClass<KeyValuePair<string, string>>.ExecuteProcess(ref dic, delegateProcess);
//I get this error :
// cannot convert from ref Dictionary<string, string> to ref IEnumerable<KeyValuePair<string, string>>
}
Dictionary は IEnumerable から継承して KeyValuePair を使用するため、Dictionnary を KeyValuePair の IEnumerable として渡すことができない理由について説明をお願いします。
また、これを行うより良い方法はありますか?