public event EventHandler<SubEventArgs> MyEvent;
dictionary<string,EventHandler<BaseEventArgs>> Foo =new dictionary<string,EventHandler<BaseEventArgs>>();
Foo.Add("Item1" , MyEvent);
SubEventArgs继承自BaseEventArgs。
但这不起作用?怎么处理这个?
更新:错误
cannot convert from 'EventHandler<SubEventArgs>' to 'EventHandler<BaseEventArgs>'
The best overloaded method match for 'System.Collections.Generic.Dictionary<string,EventHandler<BaseEventArgs>>.Add(string, EventHandler<BaseEventArgs>)' has some invalid arguments
更新:基础和子类
public class BaseEventArgs : EventArgs
{
object[] data;
public BaseEventArgs(object[] data)
{
this.data = data;
}
public BaseEventArgs(List<object> data)
{
this.data = data.ToArray();
}
public object[] Data
{
get
{
return this.data;
}
}
public bool HasData()
{
return this.data.Count() > 0;
}
}
public class SubEventArgs : BaseEventArgs
{
public enum ErrorType {
Validation = 1
Logic = 2,
System = 3
};
private ErrorType typeOfError;
public SubEventArgs( ErrorType errorType, object[] data)
: base(data)
{
this.typeOfError = errorType;
}
public SubEventArgs(ErrorType errorType, List<object> data)
: base(data)
{
this.typeOfError = errorType;
}
public ErrorType TypeOfError
{
get
{
return this.typeOfError;
}
}
}
答案 0 :(得分:0)
添加项时,只需将项目强制转换为基类;
(BaseClass)new SubClass()
然后,当你再次把它拿出来时,你可以把它扔掉。
希望有所帮助。
答案 1 :(得分:0)
这两个 - EventHandler<SubEventArgs>
和EventHandler<BaseEventArgs>
- 是完全不同的类型,没有任何继承关系。无论SubEventArgs
继承BaseEventArgs
。因此,您不能指望EventHandler<SubEventArgs>
的实例与类型EventHandler<BaseEventArgs>
的参数兼容。因此,在字典中,你不能将它们混合在一起。