VisualStudio intellisense和Lambdas。如何让它不选择实际类型?

时间:2011-07-22 22:53:06

标签: visual-studio-2010 lambda intellisense

我正在研究一个实用工具类,并定义了我的一个方法:

void SomeMethod(Action<T> a);

尴尬的是,在Visual Studio 2010中,当您开始输入时:

someClass.SomeMethod(x ...

当您按[x]键,然后按[空格]时,智能感知会自动选择以“X”开头的第一类,通常是“XmlWhatever”类

但是,如果我将方法签名更改为:

void SomeMethod(Expression<Action<T>> a);

然后,如果我开始键入相同的用法,按[x] [空格]会将实际字母设为'x'。似乎intellisense处理放入lambda是一个Expression<>类型的参数是预期的,但不是类型Action<>

有没有办法让VS intellisense正确处理第一种情况?我实际上无法传入Expression,因为我的用途是:

someClass.SomeMethod(x => x.Property1 = 123);

导致错误CS0832:表达式树可能不包含赋值运算符 因此我确实希望传递Action<>,我不需要表达式,它只是修复了智能感知。

它确实令人讨厌,因为当我输入Action参数时,我最终必须按[x] [esc] [space] [=] [&gt;]来获取文本“x =&gt; ;“,添加”escape“按键以关闭intellisense弹出窗口。有什么想法或想法吗?


修改

好的,我实际上必须重新说一下我的问题。我上面的示例代码并不准确。这似乎是VS intellisense的情况:

这是正确处理的:

public static T SomeMethod<T>(Action<T> actions) where T : class

但智能感知无法正确处理:

public static T IsT4<T>(params Action<T>[] actions) where T : class

所以似乎intellisense不喜欢params

2 个答案:

答案 0 :(得分:0)

您可以使用显式数组创建语法来解决此问题:

obj.IsT4(new Action<SomeType>[] { x => ...

您还可以创建IsT4方法的额外重载,该方法只需要1个操作委托。

答案 1 :(得分:-1)

工具|选项| C#|智能感知

取消选中'通过按空格键提交'。

enter image description here