我想要一些解释。我有一个泛型类,它获取类型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>>
}
我想解释为什么我不能将Dictionnary作为KeyValuePair的IEnumerable传递,因为Dictionary继承自IEnumerable并使用KeyValuePair。
此外,他们是更好的方式吗?
答案 0 :(得分:6)
因为它是ref
参数。
ref
参数表示该方法可以为调用者传递的字段/变量赋值。
如果您的代码合法,该方法可以分配List<KeyValuePair<string, string>>
,这显然是错误的。
您不应使用ref
参数。