Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 输入类型在lambda表达式内自动更改_C#_.net_Visual Studio_Visual Studio 2012_Lambda - Fatal编程技术网

C# 输入类型在lambda表达式内自动更改

C# 输入类型在lambda表达式内自动更改,c#,.net,visual-studio,visual-studio-2012,lambda,C#,.net,Visual Studio,Visual Studio 2012,Lambda,在使用Fluent ValidationMust子句时,我注意到了一个非常奇怪的问题 假设我有这样的模型: public class PhoneDetail { public int PrefixId { get; set; } public string Digits { get; set; } } 下面是验证器: public PhoneDetailValidator() { this.RuleFor(phone => phone.Digits)

在使用Fluent Validation
Must
子句时,我注意到了一个非常奇怪的问题

假设我有这样的模型:

public class PhoneDetail
{
    public int PrefixId { get; set; }
    public string Digits { get; set; }
}
下面是验证器:

public PhoneDetailValidator()
{
    this.RuleFor(phone => phone.Digits)
        .Must(x => x == null);
}
您认为x的类型是什么<代码>字符串?是的,你说得对

但是,这是什么?

它已将其类型从
string
更改为
PhoneDetail
。 我正在使用Visual Studio 2012

那是虫子还是什么

更新:

另外,值得一提的是,在第一种情况下,它可以进行编译。但是,在第二种情况下,编译器错误正在发生:

> Delegate 'System.Func<SportsStore.WebUI.Models.PhoneDetail,string,bool>'
> does not take 1 arguments
>委托“System.Func”
>不接受1个参数

这要么是IDE错误,要么是它试图通过向您展示另一个超负荷的
Must
方法的IntelliSense来变得聪明。另一个重载采用稍微不同的
Func
,其中包括根对象,因此您可以编写:

this.RuleFor(phone => phone.Digits)
            .Must((phone, x) => phone.Digits == null);

它只显示包含实例类型(
PhoneDetails
)的名称。在我看来,它像一个IDE错误。事实上,我刚刚尝试了相同的代码,它向我显示了
string
@DavidG可能是,我使用的是Visual Studio 2012。@FarhadJabiyev我没有2012要测试,但我建议如果关闭IDE并重新打开它就可以了。@DavidG我已经关闭并重新打开了它。还是一样。此外,我们也在我朋友的电脑上进行了测试。同样的结果。您可能也可以编写
。Must((字符串x)=>x==null))
。@SimonMᶜKenzie你可以,但它有点多余,没有使用第二个重载。是的,但在同样的意义上,你没有使用lambda的第二个参数。它们都很凌乱,但我觉得
(string x)
方法的优点是它不会更改已编译的代码。@SimonMᶜKenzie是的,但是OP在编译
x=>x==null
时没有问题,只是IDE显示了一些奇怪的东西。我同意-但是如果我们所做的只是解决IDE呈现问题,那么我更愿意避免更改编译后的代码。