C# Lambda表达式错误

C# Lambda表达式错误,c#,winforms,lambda,C#,Winforms,Lambda,在过去的几天里,我遇到了一个困扰我的问题。我找不到解决办法 我正在尝试使用lambda表达式查找字符串中出现的“\”。代码如下: Microsoft.Office.Interop.Excel.Range labelSupportTopic = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[resultRange.Row, 29]; int count = labelSupportTopic.Text.ToString().Coun

在过去的几天里,我遇到了一个困扰我的问题。我找不到解决办法

我正在尝试使用lambda表达式查找字符串中出现的“\”。代码如下:

Microsoft.Office.Interop.Excel.Range labelSupportTopic = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[resultRange.Row, 29];
int count = labelSupportTopic.Text.ToString().Count(c => c == '\\'); 
我从Excel表格中获取日期,因此是互操作参考

让我烦恼的是,这段代码是从一个完全相同的VS项目中复制和粘贴的,我丢失了它的大部分代码。我很幸运能扮演一个角色,这就是其中之一。不管怎样,在我的另一个VS项目上(我丢失了它的代码),我能够构建它,而且看起来很好。但我目前的项目,我从头开始构建的项目,它在构建时抛出了一个错误。这整个部分,包含这个逻辑的部分,是从我的旧项目(它构建得很好)中提出来的。错误为“如果不首先将lambda表达式强制转换为委托或表达式树类型,则无法将lambda表达式用作动态调度操作的参数”。我搜索了internet,但找不到解决方案

你能帮忙吗

int count = (labelSupportTopic.Text as string).Count('\\'.Equals);
因为
.Text
的类型是,所以
.ToString()
的类型也是
动态的
,并且无法推断lambda表达式中
c
的类型


在没有
dynamic
关键字的早期版本C#(VS 2010之前)中,
.Text
的类型是
object
,您的原始版本编译时应该没有问题。

如果您在调试模式下运行代码,您能看到
Microsoft.Office.Interop.Excel.Range
是否是
dynamic
?如果是,那就是你的问题。不能将lambdas或扩展方法用于dynamic。
…ToString().Count((谓词)(c=>c=='\\')@Connor谢谢你的回复。有标记的答案解决了它@JakubDąbek您的响应似乎解决了Build的问题(它的Build没有错误),但它仍然不会计算字符串中的\个数。感谢您查看。我不会将
用作
,因为这意味着您希望它可能不是字符串,如果text属性恰好不是字符串,它只会导致null引用异常。如果希望常规强制转换始终是字符串,则使用常规强制转换,如果它不是字符串,则会出错;如果它不是字符串,则使用null合并运算符将其默认为
“”
。否则我认为这个答案是正确的。@Sahuagin你是对的,但是我发现这个表单比
((string)(labelSupportTopic.Text))
更可读
.Text
可以为具有不同文本值的
范围返回null,但对于单个单元格,它至少会导致
”,因此我删除了
??“
来自我的初始示例。这似乎解决了问题。我不明白的是,尽管从另一个项目复制并粘贴了确切的代码,但它还是不起作用。知道它会做什么吗?老实说,我什么也没有改变。@AnonymousPerson正如我提到的,您的原始版本将在较旧的版本中工作,其中
.Text
返回
对象,而不是
动态
。这两个项目的设置之间肯定有一些小的差异。@Slai几乎没有一个小时的间隔,所以我不认为版本是原因。此外,我根本没有更新VS。但不管怎样,谢谢你的帮助。该产品现在功能齐全。