相关疑难解决方法(0)

将参数传递给EventHandler

我有以下内容EventHandler,我添加了一个参数MusicNote音乐:

public void PlayMusicEvent(object sender, EventArgs e,MusicNote music)
{
    music.player.Stop();
    System.Timers.Timer myTimer = (System.Timers.Timer)sender;
    myTimer.Stop();
}
Run Code Online (Sandbox Code Playgroud)

我需要将处理程序添加到Timer类似的内容中:

myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote));
Run Code Online (Sandbox Code Playgroud)

但得到错误:

"方法名称预期"

编辑:在这种情况下,我只是从包含此代码片段的方法传递e,我将如何传递计时器自己的EventArgs

c# parameter-passing event-handling

94
推荐指数
2
解决办法
14万
查看次数

Action <object,EventArgs>无法转换为EventHandler?

我正在连接一个事件以使用一个lambda,它需要在触发后自行移除.我无法通过将lambda内联到+ =事件(没有用于删除事件的可访问变量)来做到这一点,所以我设置了一个Action<object, EventArgs>变量并将lambda移动到那里.主要错误是它无法将其转换Action<object, EventArgs>为EventHandler.我认为lambda表达式可以隐式转换为事件处理程序,为什么这不起作用?

.net c# casting event-handling

28
推荐指数
2
解决办法
9802
查看次数

c#中的lambda表达式和var关键字

可能重复:
C#为什么不能将匿名方法分配给var?

我在c#中有以下声明

Func <int, int, int> add = (x, y) => x + y;
Run Code Online (Sandbox Code Playgroud)

但是当我用以下代替左手边的声明时

var add = (x, y) => x + y;
Run Code Online (Sandbox Code Playgroud)

我收到编译错误(无法将lambda表达式赋值给隐式类型的局部变量).为什么?

c# lambda

26
推荐指数
2
解决办法
1万
查看次数

使用带有新Func <T,TResult>的void返回类型

我在我的代码中使用匿名委托调用此示例函数:

public static int TestFunction(int a, int b) {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

代表看起来像这样:

var del = new Func<int, int, int>(TestFunction);
Run Code Online (Sandbox Code Playgroud)

我的问题是:你如何指定一个void返回类型TResult?以下不起作用:

public static void OtherFunction(int a, string b) { ... }
var del = new Func<int, string, void>(OtherFunction);
Run Code Online (Sandbox Code Playgroud)

c# generics

25
推荐指数
2
解决办法
2万
查看次数