web-dev-qa-db-ja.com

C#.NET Rx- System.Reactiveはどこにありますか?

私は集中的なJavaバックグラウンドを持っているので、C#で明らかなものを見落とすことは許してくれますが、私の研究はどこにも行きません。リアクティブRx .NETライブラリを使用しようとしています。 IObservableについて文句を言っているわけではありませんが、Zipメソッドを呼び出しています。「... usingディレクティブまたはAssembly参照がありませんか?」

名前空間を調べてきましたが、探しているものが見つかりません。使用するとエラーをスローする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() {}
}

* UPDATE *

回答からの入力を考慮した後の作業バージョンは次のとおりです。

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() {}
}
29
tmn

おそらく、Rxに必要なアセンブリ参照をプロジェクトに追加していないでしょう。 (アセンブリの参照はnot名前空間のインポートと同じです!名前空間とは何か知っています;アセンブリはJARに似たものです;コードの展開/配布の最小単位です。プロジェクトは内部で定義された名前空間が使用可能になる前に参照してください。)

プロジェクトが.NET Frameworkバージョン4以降を対象にしているため、コンパイラはIObservable<T>およびIObserver<T>について文句を言わない可能性があります。これらの2つのインターフェイスは、.NETバージョン4以降のコア.NET Frameworkクラスライブラリ(FCL)の一部でした。(以前の.NETバージョンを対象とした場合、これらの未定義のインターフェースを使用してもエラーが発生します。)

これら2つのインターフェイス以外のRxのすべての部分は、notコア.NET FCLに含まれていますが、独自の(アドオン)アセンブリに含まれています。それらをプロジェクトに追加できます。対応する NuGetパッケージ をインストールすることにより:

  1. Visual Studioで、ツールNuGetパッケージマネージャーパッケージマネージャーコンソールに移動します。

  2. NuGetコンソールウィンドウで、ドロップダウンリストでターゲットプロジェクト(Rxを使用する場所)を選択しますデフォルトプロジェクト

  3. 次に、Install-Package System.Reactiveと入力してヒットします Enter ↵。 (注:以前、このパッケージはRx-Mainと呼ばれていました。詳細については この回答 を参照してください。)

  4. これにより、System.Reactive.*アセンブリ参照がプロジェクトに追加されます。

40
stakx

バージョン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

ソース

32
Matt Klein