![]() |
1
34
不,你不能这样做。这会很好,但没有某种AOP参与是不可能的。我相信Postshap可以做得很好,希望使用属性,在代码契约中,它只是:
理想情况下,我想要一个PostSharp属性来生成代码契约调用——我会在某个时候处理它——但是在那之前,您得到的扩展方法是我找到的最好的方法…… (如果我尝试过PostSharp+代码契约方法,我肯定会在博客上介绍它,顺便说一句… Mono Cecil 可能也会变得相当容易。) 编辑:要扩展Laurent的答案,您可能有:
如果你有很多不可以为空的参数,你可以有:
这需要使用反射来计算属性。有一些方法可以避免对每个访问进行反射,为每个属性构建一个委托,并且通常会使它变得很出色。我可能会调查这个博客帖子…但这有点恶心,我更喜欢能将参数属性化的想法… 编辑:代码实现,以及 blog post 正式制作。但有趣 |
![]() |
2
3
总之:没有。 向扩展方法传递一个值。它不知道值来自何处,也不知道调用者可能选择将其引用为什么标识符。 |
![]() |
3
2
我发现使用一个代码片段很容易做到这一点。
在您的示例中,我可以键入
这是一个片段:
|
![]() |
4
1
我建议您最好执行以下操作:
在这种情况下使用泛型似乎没有增加任何价值。但关于你最初的问题,我认为那是不可能的。 |
![]() |
5
1
如何:
然后将throwifargumentInstall定义为
很抱歉,目前我没有时间填写详细信息或提供完整的代码。 |
![]() |
6
1
我喜欢 Enforce 从 Lokad Shared Libraries . 基本语法:
如果任何参数为空,这将引发参数名和类型的异常。 |