如何在C#中连接函数?

如何在C#中连接函数?,c#,lambda,observable,C#,Lambda,Observable,我很难理解这段代码: public IObservable<SomeInfo> OriginalFunction() => FirstFunction().SecondFunction(argument1).ThirdFunction(argument2); public IObservable OriginalFunction()=>FirstFunction()。SecondFunction(argument1)。ThirdFunction(argument2); 首先

我很难理解这段代码:

public IObservable<SomeInfo> OriginalFunction() => FirstFunction().SecondFunction(argument1).ThirdFunction(argument2);
public IObservable OriginalFunction()=>FirstFunction()。SecondFunction(argument1)。ThirdFunction(argument2);
首先,我不明白那是什么意思。此函数是否返回一个可观察值

那么,lambda
=>
做什么呢

最后,这三个函数是如何使用dots相互连接的?

public IObservable OriginalFunction()=>FirstFunction()。SecondFunction(argument1)。ThirdFunction(argument2);
public IObservable<SomeInfo> OriginalFunction() => FirstFunction().SecondFunction(argument1).ThirdFunction(argument2);
相当于

public IObservable<SomeInfo> OriginalFunction() 
{ 
    var firstResult = FirstFunction();
    var secondResult = firstResult.SecondFunction(argument1)
    return secondResult.ThirdFunction(argument2); // mind the 'return' here!
}
public IObservable OriginalFunction()
{ 
var firstResult=FirstFunction();
var secondResult=firstResult.SecondFunction(argument1)
return secondResult.ThirdFunction(argument2);//注意这里的“return”!
}

顺便问一下,代码< > AgMUTUT1 和<代码> AguMut2 2/代码>作为类字段或属性,有些人会考虑“不太干净”*./P> *我应该详细说明一下:虽然干净的代码提倡拥有尽可能少的参数,但在这里使用类字段或属性确实会使函数更难测试。我个人认为这是一种应该避免的副作用。我说的副作用是什么意思?根据类字段的值,此函数的两个调用可能返回不同的结果。这个可能是合理的,也可能不是。取决于代码的实际语义,这在示例中一点也不清楚

因此,TL;DR:考虑使用类字段是否合理,或者使用两个参数或使用“选项模式”参数更合理。考虑:是否清楚预期的结果(“不要让客户感到惊讶”)?这个函数是可测试的吗?还有一些


编辑:

=>
是C#6.0中添加的一项功能:

您编写的许多成员都是可以是单个表达式的单个语句。改为编写一个表达式体成员。它适用于方法和只读属性。例如,ToString()的重写通常是一个很好的选择:
public重写字符串ToString()=>$“{LastName},{FirstName}”


第一个返回调用第二个的结果,第三个返回调用第三个的结果,第三个返回IObservable<代码>=>
只是语法上的糖分。对于链接部分,请查看生成器模式
=>
表示方法内部的代码,但在lambda中。和
IObserable
通常它应该是通用的interface@Muaath-什么是“通常应该是泛型接口”?@Enigmativity-我的意思是:有一个传统:任何以大写字母
I
开头的类型都意味着它是一个接口,而不是类或枚举。任何包含
的类型都表示它是通用的,非常感谢。最后一个问题:我试图用花括号替换=>,但现在我得到了“并非所有代码路径都返回值”错误。@coyob49我相信这是c#8的另一个语法糖。它与方法返回相同,只是语法更短。所以,
MyMethod{return1;}
MyMethod=>1是等效的。这就是为什么当你用curly替换
=>
时,你必须添加一个
return