J'ai un arrière-plan intensif Java alors pardonnez-moi si j'oublie quelque chose d'évident en C #, mais mes recherches ne me mènent à rien. J'essaie d'utiliser la bibliothèque Rx .NET réactive. Le compilateur ne se plaint pas de IObservable
mais de l'appel à la méthode Zip
. Il lance la "... vous manque une directive using ou une référence d'assembly?"
J'ai parcouru les espaces de noms et je ne trouve pas ce que l'on cherche. Je ne trouve pas le System.Reactive
qui génère également une erreur s'il est utilisé, et toutes les références sont déjà incluses pour cette application Windows 8.1. Quelqu'un peut-il me donner une idée de ce qui ne va pas?
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() {}
}
* MISE À JOUR *
Voici la version de travail après examen des réponses.
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() {}
}
Vous n'avez probablement pas ajouté les références d'assemblage nécessaires pour Rx à votre projet . (Référencer un assembly est pas la même chose que d'importer un espace de noms! Vous savez déjà ce qu'est un espace de noms; un assemblage est quelque chose de similaire à un JAR; la plus petite unité de déploiement/distribution de code. Votre projet doit y faire référence avant que les espaces de noms définis à l'intérieur de celui-ci ne soient disponibles.)
Le compilateur ne se plaint probablement pas de IObservable<T>
et IObserver<T>
car votre projet cible la version 4 ou ultérieure de .NET Framework. Ces deux interfaces font partie du noyau .NET Framework Bibliothèque de classes (FCL) depuis .NET version 4. (Si vous avez ciblé une version antérieure de .NET , vous obtiendrez également des erreurs pour l'utilisation de ces interfaces non définies.)
Chaque partie de Rx autre que ces deux interfaces est pas incluse dans le noyau .NET FCL, mais réside dans leurs propres assemblys (add-on). Vous pouvez les ajouter à votre projet, par exemple en installant les packages NuGet packages :
Dans Visual Studio, accédez à Tools → NuGet Package Manager → Package Manager Console.
Dans la fenêtre de la console NuGet, sélectionnez le projet cible (où vous souhaitez utiliser Rx) dans la liste déroulante Projet par défaut.
Ensuite, saisissez Install-Package System.Reactive
et appuyez sur Enter ↵. (Remarque: ce paquet s'appelait auparavant Rx-Main
précédemment; voir cette réponse pour plus de détails.)
Cela ajoutera le System.Reactive.*
Références d'assemblage à votre projet.
Depuis la version 3, le projet Rx
est désormais connu sous le nom de System.Reactive
car il "met la dénomination du package NuGet en conformité avec les directives NuGet et également l'espace de noms dominant dans chaque package."
Il peut être téléchargé à partir de NuGet en recherchant "System.Reactive" ou vous pouvez le télécharger ici: https://www.nuget.org/packages/System.Reactive/
Voici la page GitHub du projet: 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