我有丰富的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:
Install-Package System.Reactive
并按Enter。 (注意:此软件包以前曾被称为Rx-Main
;有关详细信息,请参见this answer。)System.Reactive.*
程序集引用添加到您的项目中。