我正在研究一个实用工具类,并定义了我的一个方法:
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
。
答案 0 :(得分:0)
您可以使用显式数组创建语法来解决此问题:
obj.IsT4(new Action<SomeType>[] { x => ...
您还可以创建IsT4
方法的额外重载,该方法只需要1个操作委托。
答案 1 :(得分:-1)
工具|选项| C#|智能感知
取消选中'通过按空格键提交'。