我有丰富的Java背景,因此,如果我忽略了C#中显而易见的内容,请原谅我,但我的研究无济于事。我正在尝试使用 react 性Rx .NET库。编译器并没有提示IObservable,而是调用了zip方法。它抛出“...您是否缺少using指令或程序集引用?”

我已经遍历了命名空间,但找不到所需的内容。我找不到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() {}
}

*更新*

这是考虑了答案输入后的工作版本。
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() {}
}

最佳答案

您可能没有将Rx的必要程序集引用添加到项目中。 (引用程序集与导入 namespace 并不相同!您已经知道 namespace 是什么;程序集类似于JAR;最小的代码部署/分发单元。您的项目必须在内部定义的 namespace 之前引用它。它可供使用。)

编译器可能不会提示 IObservable<T>IObserver<T> ,因为您的项目面向.NET Framework 4或更高版本。从.NET版本4开始,这两个接口(interface)就已经是核心.NET Framework 类库(FCL)的一部分。(如果您定位到早期的.NET版本,则使用这些未定义的接口(interface)也会出错。)

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

  • 在Visual Studio中,转到“工具”→“NuGet程序包管理器”→“程序包管理器控制台”。
  • 在NuGet控制台窗口中,从默认项目下拉列表中选择目标项目(您要在其中使用Rx)。
  • 接下来,键入Install-Package System.Reactive并按Enter。 (注意:此软件包以前曾被称为Rx-Main;有关详细信息,请参见this answer。)
  • 这会将System.Reactive.*程序集引用添加到您的项目中。
  • 10-07 18:56
    查看更多