我试图在我的C#客户端程序中启用SSL,并在此答案中找到以下代码:
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
(se, cert, chain, sslerror) =>
{
return true;
};
Run Code Online (Sandbox Code Playgroud)
我将代码添加到我的程序中它解决了问题,但我完全不知道它是如何工作的.
左边部分System.Net.ServicePointManager.ServerCertificateValidationCallback
是一些回调并+=
修改了回调.但剩下的构造意味着什么呢?我花了20分钟搜索至少找到它是如何正确调用的,在哪里我可以找到更多关于如何阅读的信息,但都是徒劳的.我想它与LINQ有某种关联并搜索"LINQ箭头",但没有找到任何合理的东西.
如何(blah,blah,blah)=>{return true;}
调用该构造,在哪里可以找到有关此类构造的更多信息?
jas*_*son 71
这是一个lambda表达式.这是一个非常特殊的匿名代表.基本上你是在定义一个方法而不是给出一个名字.它的参数位于左侧,=>
方法体位于右侧=>
.在你的特定情况下,
(se, cert, chain, sslerror) => { return true; };
Run Code Online (Sandbox Code Playgroud)
是一个由lambda表达式定义的匿名方法.这种特殊方法有四个参数
object se
X509Certificate cert
X509Chain chain
SslPolicyErrors sslerror
Run Code Online (Sandbox Code Playgroud)
而方法体是
return true;
Run Code Online (Sandbox Code Playgroud)
就像你说的那样
class ServerCertificateValidation {
public bool OnRemoteCertificateValidation(
object se,
X509Certificate cert,
X509Chain chain,
SslPolicyErrors sslerror
) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
然后
var validation = new ServerCertificateValidation();
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
validation.OnRemoteCertificateValidation;
Run Code Online (Sandbox Code Playgroud)
如何
(blah,blah,blah)=>{return true;}
调用该构造,在哪里可以找到有关此类构造的更多信息?
它的调用方式与调用任何其他方法的方式相同.例如,您可以这样做:
Func<int, int, int> adder = (m, n) => m + n;
Run Code Online (Sandbox Code Playgroud)
在这里,我定义了一个吃掉一对int
并返回一个的方法int
.这int
是通过添加输入参数的值来获得的.它可以像任何其他方法一样调用.
int four = adder(2, 2);
Run Code Online (Sandbox Code Playgroud)
这是关于lambda表达式的 MSDN上的一篇文章和关于lambda运算符的文章.如果您真的感兴趣,这个名字来自lambda演算.
Mar*_*ell 14
为了完整性(对于搜索结果等):在更新的 C# 版本(自 6.0 起)中,=>
语法已从仅用于委托和表达式树的 lambda 扩展到涵盖表达式主体成员。这意味着一系列简单的成员,如属性、方法等 - 可以实现为表达式主体;例如:
public int Foo { get { return innerObj.SomeProp; } }
public void Bar() { Write("Thing"); }
Run Code Online (Sandbox Code Playgroud)
可以写成:
public int Foo => innerObj.SomeProp;
public void Bar() => Write("Thing");
Run Code Online (Sandbox Code Playgroud)
的=>
-运算符表示一个lambda表达式。
但是对于现在访问这个问题的人来说,另一个用例可能是箭头作为属性 getter 的简写。这个特性是在 C# 6 中引入的。所以而不是编写
public string Foo
{
get
{
return this.bar;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码段:
public string Foo
{
get => this.bar;
}
Run Code Online (Sandbox Code Playgroud)
甚至更短:
public string Foo => this.bar;
Run Code Online (Sandbox Code Playgroud)