- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
FromEvent
似乎没有过载或 FromEventPattern
将转换为 IObservable<T>
的方法类型为 TDelegate
的事件仅在有多个参数且没有 EventArgs
的情况下.
例如看来我们无法将以下内容转换为可观察对象。
public event Action<int, int> SomethingHappened;
public event Func<string, int> SomethingElseHappened;
我们必须一个EventArgs
在某处或有一个TDelegate
在其签名中只有一个参数。所以,以下是可转换的,因为它们有一个 EventArgs
在他们的隐式委托(delegate)中。
public event NameChangedHandler NameChanged;
public event EventHandler RollNumberChanged;
public event EventHandler<AgeChangedEventArgs> AgeChanged;
public delegate void NameChangedHandler(
object sender,
NameChangedEventArgs e);
而且这个也可以转换,因为它只有一个T
。在其参数中。
public event Action<Tuple<string, string>> ClassChanged;
如果我遇到这样的事件我该怎么办:
public event Action<T1, T2...> ItHappened;
最佳答案
使用类测试器
public class Tester
{
public void FireEvent(int i1, int i2, int i3)
{
if(ItHappened != null)
ItHappened(i1, i2, i3);
}
public event Action<int, int, int> ItHappened;
}
你可以使用这个签名 Observable.FromEvent<TDelegate, TEventArgs> (Func<Action<TEventArgs>, TDelegate>, Action<TDelegate>, Action<TDelegate>)
像这样的转换函数:
var t3 = new Tester();
IObservable<Tuple<int, int, int>> observable = Observable.FromEvent<Action<int, int, int>, Tuple<int, int, int>>(
onNextHandler => (int i1, int i2, int i3) => onNextHandler(Tuple.Create(i1, i2, i3)),
h => t3.ItHappened += h,
h => t3.ItHappened -= h);
using (var disposable = observable.Subscribe(t => Console.WriteLine($"{{{t.Item1}, {t.Item2}, {t.Item3}}}")))
{
t3.FireEvent(1, 2, 3);
}
t3.FireEvent(1, 2, 3);
关于该重载有一个很好的引用 here .
关于c# - 与委托(delegate)具有多个参数且没有 EventArgs 的事件集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739391/
我有一个当前定义的没有事件参数的事件。即它发送的EventArgs是EventArgs.Empty。 在这种情况下,最简单的方法是将我的事件处理程序声明为: EventHandler MyCustom
我了解使用带有签名 delegate void delegate_name(object sender, EventArgs e) 的委托(delegate)类型的事件的好处 a) 但除了它可以节省我
我正在使用这种方式从 XAML 中捕获事件: 这种方式很有效,我可以在我的代码中触发我的 ChangeValue 函数。但我想知道我的 ChangeValue
我的一些代码中有 protected override void OnFormClosing(FormClosingEventArgs e),代码分析给出了 CA1062,因为我不检查 e 是否为 n
C#语言中的java等价方法“getSource()”是什么 public void actionPerformed(ActionEvent e) { if(e.getSource().equa
这个问题在这里已经有了答案: Aliasing / Shortening the Namespaces in .NET (2 个答案) 关闭 6 年前。 是否可以为某些类型声明缩写,例如 Depen
我有一个引发事件的类。我希望订阅者能够修改在 EventArgs 中传递的值。 在引发事件的类中: class Factory { public event EventHand
我有一个非常基本的事件: public event EventHandler OnAborted; 我需要做的就是调用这个事件,我什至不需要提供任何参数,所以没什么特别的。我对 EventArgs 参
我正在开发 Windows 窗体应用程序,我想将类型为 MouseEventArgs 的参数传递给 Picturebox 上的 MouseClick 事件EventArgs,但当我这样做时,调试器会为
我有多个具有相同设计的表单,例如: In Form1{ Form2 = new Formtoopen(); Form2.Resize += new EventHandler(Form2_Resize)
我正在学习 C# 中的事件,并且了解 EventArgs 类包含有关事件的数据。但是我很难理解为什么 EventArgs 是必要的。 例如,在 this MSDN example 中,WakeMeUp
我有点懵。我知道我可以创建从 EventArgs 派生的类以获得自定义事件数据。但是我能以某种方式使用基类 EventArgs 吗?就像鼠标按钮点击一样,在订阅者方法中,总是有“EventArgs e
我正在重构的类库有大量事件(超过 50 个),每个事件都有自己的委托(delegate),尽管许多事件具有相同的参数。我开始将它们全部切换为使用 EventHandler 和自定义 EventArgs
海报在 Are EventArg classes needed now that we have generics和 Does .NET have a built-in EventArgs?建议不要使
考虑这个函数签名: Private Void TextBox1_TextChange(Object Sender, EventArgs e) 据我所知,我的理解如下。 private是修饰符 返回类型
在 .NET 应用程序中,事件通常以这种方式连接: public event EventHandler OnChange { add { _dependency.OnC
经典的通用 C# 事件具有以下参数: (object sender, EventArgs e) 我可以为 e 参数实现一个具有更具体签名的事件,为 EventArgs 派生。 现在,像 EventAr
我正在学习 WPF/Silverlight,并在 MS 视频广播中看到现在建议使用 RoutedEventArgs超过 EventArgs ;虽然它没有确切说明原因。 我有一个 win forms 应
我有一个用户控件,它在与 Web 服务通信后引发事件。父级在引发时处理此事件。我认为正确的方法是将从网络服务返回的对象作为 eventargs 传递给父级??? 如果这是正确的方法,我似乎无法找到有关
我正在开发一款游戏只是为了好玩,我正在尝试实现事件但出现错误: Error CS0305: Using the generic type 'Game.NPC.Events.MurderEventArg
我是一名优秀的程序员,十分优秀!