Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
VB.NET匿名委托的等效C#代码是什么?_C#_.net_Vb.net_Delegates_Anonymous - Fatal编程技术网

VB.NET匿名委托的等效C#代码是什么?

VB.NET匿名委托的等效C#代码是什么?,c#,.net,vb.net,delegates,anonymous,C#,.net,Vb.net,Delegates,Anonymous,以下VB.NET的等效C#代码是什么: Dim moo=Function(x作为字符串)x.ToString() 我认为这应该有效: var moo=(字符串x)=>x.ToString() 但这产生了一个编译器错误:无法将lamda表达式分配给隐式类型的局部变量 经过进一步调查,我发现VB示例中变量moo(moo.GetType())的类型是VB$AnonymousDelegate\u 0'2[System.String,System.String] 在C#?中是否有与此等效的内容?您不需要在

以下VB.NET的等效C#代码是什么:

Dim moo=Function(x作为字符串)x.ToString()

我认为这应该有效:

var moo=(字符串x)=>x.ToString()

但这产生了一个编译器错误:
无法将lamda表达式分配给隐式类型的局部变量

经过进一步调查,我发现VB示例中变量
moo
moo.GetType()
)的类型是
VB$AnonymousDelegate\u 0'2[System.String,System.String]


在C#?

中是否有与此等效的内容?您不需要在lambda表达式中指定参数类型,只需执行以下操作:

Func<string, string> moo = (x) => x.ToString();
Func moo=(x)=>x.ToString();

您不需要在lambda表达式中指定参数类型,只需执行以下操作:

Func<string, string> moo = (x) => x.ToString();
Func moo=(x)=>x.ToString();
Func moo=(x)=>x.ToString();
使用
var
C#不知道您是否需要
Func
Action
或其他东西。

Func moo=(x)=>x.ToString();

使用
var
C#不知道是否需要
Func
Action
或其他内容。

lambda需要根据上下文推断使用的委托类型。隐式类型变量将根据分配给它的内容推断其类型。他们每个人都试图从对方身上推断出自己的类型。您需要在某个地方显式使用该类型

有很多代表可以拥有您正在使用的签名。编译器需要知道使用哪一种方法

最简单的选择是使用:

Func<string, string> moo = x => x.ToString();

lambda需要根据其上下文推断所用委托的类型。隐式类型变量将根据分配给它的内容推断其类型。他们每个人都试图从对方身上推断出自己的类型。您需要在某个地方显式使用该类型

有很多代表可以拥有您正在使用的签名。编译器需要知道使用哪一种方法

最简单的选择是使用:

Func<string, string> moo = x => x.ToString();

问题是不能对委托使用隐式类型。这意味着LHS上的
var
是问题的实际原因,您的lambda表达式很好。如果您将其更改为以下内容,它将按预期编译和工作

 Func<string, string> moo = (string x) => x.ToString();
Func moo=(字符串x)=>x.ToString();

问题在于不能对代理使用隐式键入。这意味着LHS上的
var
是问题的实际原因,您的lambda表达式很好。如果您将其更改为以下内容,它将按预期编译和工作

 Func<string, string> moo = (string x) => x.ToString();
Func moo=(字符串x)=>x.ToString();


在C#中不能将lambda分配给
var
,它不知道您是否需要返回值。在C#中不能将lambda分配给
var
,它不知道您是否需要返回值。如果编译器需要知道哪种类型,那么VB为什么工作?@JesanFafon我不知道。在这种情况下,委托的类型是什么?它如何知道使用哪个委托?也许VB编译器只会为您选择一个(随机?)。在VB的情况下,
moo.GetType()
返回
VB$AnonymousDelegate\u 0'2[System.String,System.String]
。它推断出了一种委托类型,而C#似乎根本没有这样做。@JesanFafon因此在这种情况下,它当场创建了一种全新的委托类型。这通常看起来是个坏主意。几乎可以肯定的是,要使用这样的类型,您所能做的事情不会太多,因此您只能在当前上下文中执行它,这使得它在实践中没有太大的用处。虽然我同意,但看起来此委托类型是可分配的,如下所示:
Dim moo2 as Func(of String,String)=moo
如果编译器需要知道哪种类型,那么VB为什么工作?@JesanFafon我不知道。在这种情况下,委托的类型是什么?它如何知道使用哪个委托?也许VB编译器只会为您选择一个(随机?)。在VB的情况下,
moo.GetType()
返回
VB$AnonymousDelegate\u 0'2[System.String,System.String]
。它推断出了一种委托类型,而C#似乎根本没有这样做。@JesanFafon因此在这种情况下,它当场创建了一种全新的委托类型。这通常看起来是个坏主意。几乎可以肯定的是,要使用这样的类型,您所能做的事情不会太多,因此您只能在当前上下文中执行它,这使得它在实践中没有太大的用处。虽然我同意,但看起来此委托类型是可分配的,如下所示:
Dim moo2 as Func(of String,String)=moo
@Servy:Brain fart并修复。我花了一秒钟的时间,因为我不知道VB.Net中的
x
是什么(在他们添加lambdas之前停止了VB)@Servy:Brain fart并修复了它。花了我一秒钟的时间,因为我无法弄清楚VB.Net中的
x
是什么(在他们添加lambdas之前停止使用VB),也许这只是示例代码,但将字符串转换为字符串似乎很奇怪!仅举一个例子:P原来是VB文件中的一个本地函数,用于执行一些字符串清理。这是在VB.NET中演示匿名委托的最短示例之一。也许这只是示例代码,但将字符串转换为字符串似乎很奇怪!仅举一个例子:P原来是VB文件中的一个本地函数,用于执行一些字符串清理。这是在VB.NET中演示匿名委托的最短示例之一