Здравствуйте, Aen Sidhe, Вы писали:
AS>Здравствуйте, huligun, Вы писали:
H>>Хочу написать следующим образом, но компилятор ругается.
H>>
H>>public event EventHandler<TreeNodeActionArgs<Video>> NewVideosTreeNodeSelected;
H>>private void OnTreeNodeSelected<T>(object sender, TreeNodeActionArgs<T> e)
AS>where T : Video
H>>{
H>> NewVideosTreeNodeSelected(this, e);
H>> //здесь компилятор выдает ошибку
H>> //не может привести TreeNodeActionArgs<T> к TreeNodeActionArgs<Video>
H>>}
H>>
H>>Как все таки сделать так чтобы заработало, если я точно знаю что в T придет Video.
AS>Так?
Увы это не помогло, таже ошибка компилятора. Не может скастить е к типу TreeNodeActionArgs<Video>, который требуется для делегата EventHandler<TreeNodeActionArgs<Video>>.
Здравствуйте, huligun, Вы писали:
H>Увы это не помогло, таже ошибка компилятора. Не может скастить е к типу TreeNodeActionArgs<Video>, который требуется для делегата EventHandler<TreeNodeActionArgs<Video>>.
Delegate 'System.EventHandler<TreeNodeActionArgs<Video>>' has some invalid arguments
Argument '2': cannot convert from 'TreeNodeActionArgs<T>' to 'TreeNodeActionArgs<Video>'
И приведение через (TreeNodeActionArgs<Video>)e тоже не помогало, писал что не может сконвертить.
Проблему решил банально, все отлично скомпилилось и в рантайме привелось к типу через (e as TreeNodeActionArgs<Video>).
Здравствуйте, huligun, Вы писали:
H>Проблему решил банально, все отлично скомпилилось и в рантайме привелось к типу через (e as TreeNodeActionArgs<Video>).
зачем так делать?
А почему не
public event EventHandler<TreeNodeActionArgs<T>> NewVideosTreeNodeSelected;
private void OnTreeNodeSelected<T>(object sender, TreeNodeActionArgs<T> e)
{
if (NewVideosTreeNodeSelected != null)
NewVideosTreeNodeSelected(this, e);
}