bra*_*ing 5 c# resharper expression-trees
我有一个方法
public static class PropertyLensMixins
{
public static ILens<Source> PropertyLens<O,Source>
( this O o
, Expression<Func<O, Source>> selector
)
where O: class, INotifyPropertyChanged
where Source: class, Immutable
{
return new PropertyLens<O, Source>(o, selector);
}
}
Run Code Online (Sandbox Code Playgroud)
而这个想法是以这种方式使用它
this.PropertyLens(p=>p.MyProp)
Run Code Online (Sandbox Code Playgroud)
但是,即使编译器接受它,创建嵌套表达式也是错误的
this.PropertyLens(p=>p.MyProp.NestProp)
Run Code Online (Sandbox Code Playgroud)
现在我可以通过解析表达式树在运行时捕获它.例如
var names = ReactiveUI.Reflection.ExpressionToPropertyNames(selector).ToList();
if (names.Count > 1)
throw new ArgumentException("Selector may only be depth 1", "selector");
Run Code Online (Sandbox Code Playgroud)
我想知道,有没有聪明的方法在编译时检测到这个?我怀疑它是因为编译器对类型签名感到满意,但我想我可能会问.
我也尝试过一个Resharper模式来匹配它作为一个错误
$id0$.PropertyLens($id1$=>$id1$.$id2$.$id3$)
Run Code Online (Sandbox Code Playgroud)
所有占位符都是标识符,但Resharper似乎无法匹配它.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |