Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WhenAny用于当前空值_C#_Reactiveui - Fatal编程技术网

C# WhenAny用于当前空值

C# WhenAny用于当前空值,c#,reactiveui,C#,Reactiveui,对于当前为空且稍后将设置的值的属性,是否有任何方法可以使用WhenAny? 像这样: public Server SelectedServer {get;set;} public TestClass() { this.WhenAny(SelectedServer.Items.Changed, x => x).Subscribe(/*Do something*/); } SelectedServer最初为空,将由用户通过交互进行设置,因此我总是在构造函数中得到一个NullRe

对于当前为空且稍后将设置的值的属性,是否有任何方法可以使用WhenAny?
像这样:

public Server SelectedServer {get;set;}

public TestClass()
{
    this.WhenAny(SelectedServer.Items.Changed, x => x).Subscribe(/*Do something*/);
}  

SelectedServer最初为空,将由用户通过交互进行设置,因此我总是在构造函数中得到一个NullReferenceException。

这是一个会导致运行时崩溃的输入错误,应该是:

this.WhenAnyValue(x => x.SelectedServer.Items.Changed);
但考虑到变量的名称,我猜更好的方法是:

this.WhenAnyObservable(x => x.SelectedServer.Items.Changed);

只需在设置
SelectedServer
时订阅即可-最好也取消订阅任何旧订阅-因为现在这样做永远不会起作用,因为C#在传递参数之前会评估参数(因此,您需要一个函数或一个
Lazy
值来传递到
WhenAny
,然后
WhenAny
无法知道何时可以安全地使用它们;)如果我想将WhenAny用于ObservablePropertyHelper(即,使用ToProperty()),这是否也可行?在阅读了WhenAnyObservable之后,这一点你可能也是对的。然而,我仍然不太确定WhenAny和Whenanyobsible之间的区别。在引用另一个对象的属性时,如果对象本身被替换,是否通常使用它?例如,如果我在上面的示例中简单地将x.SelectedServer.Items.Changed替换为x.SelectedServer.ItemCount。当链中的最后一个项的类型为IOBServable时,您应该使用WhenyObservable。您知道为什么当我将SelectedServer从null设置为已包含项的实际实例时,WhenyObservable不会触发吗(项目类型为IReactiveDerivedList,且ChangeTrackingEnabled设置为true)?@TobiasZimmermann除非有更改,否则不会激发-在分配实例时不会立即激发,因为我能够使其工作。StartWith不使用“null”我试图传递一个空列表,这当然意味着StartsWith不应该以任何东西开头--