C#.NET Rx- System.Reactive在哪里?

tmn*_*tmn 29 .net c# reactive-programming system.reactive

我有一个密集的Java背景,所以请原谅我,如果我忽略了C#中明显的东西,但我的研究让我无处可去.我正在尝试使用反应性Rx .NET库.编译器没有抱怨,IObservable但它是对zip方法的调用.它抛出"......你错过了使用指令或汇编参考吗?"

我一直在浏览命名空间,但我找不到想要的东西.System.Reactive如果使用的话,我找不到哪个也会抛出错误,并且此Windows 8.1应用程序已包含所有引用.有人可以告诉我有什么问题吗?

public sealed class EventEngine
{    
    private static readonly EventEngine singleton = new EventEngine();

    public static EventEngine get()
    {
        return singleton;
    }

    public IObservable<MusicNote> CurrentKey { get; set; }
    public IObservable<Scale> CurrentScale { get; set; }

    public IObservable<AppliedScale> CurrentAppliedScale
    {
        get
        {
            return CurrentScale.zip(CurrentKey,
                (s, k) => AppliedScale.getAppliedScale(k, s));
        } 
    }

    private EventEngine() {}
}
Run Code Online (Sandbox Code Playgroud)

*更新*

这是考虑答案输入后的工作版本.

public sealed class EventEngine
{
    private static readonly EventEngine singleton = new EventEngine();

    public static EventEngine get()
    {
        return singleton;
    }

    public IObservable<MusicNote> CurrentKey { get; set; }
    public IObservable<Scale> CurrentScale { get; set; }

    public IObservable<AppliedScale> CurrentAppliedScale
    {
        get
        {
            return Observable.Zip(CurrentScale, CurrentKey,
                (s, k) => AppliedScale.getAppliedScale(s,k));
        } 
    }

    private EventEngine() {}
}
Run Code Online (Sandbox Code Playgroud)

sta*_*ica 40

您可能没有为项目添加Rx所需的程序集引用.(引用组件是一样的东西导入命名空间你已经知道什么是命名空间;!组件类似于JAR东西;代码部署/分布的最小单位您的项目必须引用它里面所定义的命名空间之前它可以使用.)

编译器可能不抱怨IObservable<T>,IObserver<T>因为您的项目针对.NET Framework版本4或更高版本.自.NET版本4以来,这两个接口已成为核心.NET Framework类库(FCL)的一部分.(如果您针对早期的.NET版本,那么使用这些未定义的接口也会出错.)

除了这两个接口之外,Rx的每个部分都不包含在核心.NET FCL中,而是驻留在它们自己的(附加组件)程序集中.您可以将它们添加到项目中,例如通过安装相应的NuGet包:

  1. 在Visual Studio中,转到工具NuGet包管理器包管理器控制台.

  2. 在NuGet控制台窗口中,在下拉列表Default project中选择目标项目(您要在哪里使用Rx).

  3. 接下来,输入Install-Package System.Reactive并点击Enter ↵.(注意:Rx-Main以前曾调用此包; 有关详细信息,请参阅此答案.)

  4. 这将为System.Reactive.*您的项目添加程序集引用.

  • 在官方GitHub和MSDN上发布的有关RX.NET的信息非常令人困惑.正如有人刚刚进入这个,我甚至不知道任何人都有耐心开始这个... MSDN声明它的核心包括(显然是指IObservable等)并且没有提及关于其余部分的一件事.事实上,如果您尝试安装它,它们会发送一个超链接循环(没有实际下载):https://msdn.microsoft.com/en-us/library/hh242980(v = vs.103).aspx (5认同)
  • 我很困惑,因为我得到的印象是,反应库本质上是.NET核心框架的一部分,因为`IObservable`是.显然它不是. (3认同)

Mat*_*ein 32

从版本3开始,该Rx项目现在被称为" System.Reactive因为它"使NuGet包命名符合NuGet指南以及每个包中的主要命名空间.

可以通过搜索"System.Reactive"从NuGet下载,也可以在此处下载:https://www.nuget.org/packages/System.Reactive/

这是项目的GitHub页面:https://github.com/Reactive-Extensions/Rx.NET

包映射

  • Rx-Main System.Reactive
  • Rx-Core System.Reactive.Core
  • Rx-Interfaces System.Reactive.Interfaces
  • Rx-Linq System.Reactive.Linq
  • Rx-PlatformServices System.Reactive.PlatformServices
  • Rx-Testing Microsoft.Reactive.Testing

资源

  • 如果您需要为.NET framework v4.0安装它,该怎么办? (4认同)