将方法传递给另一个方法

时间:2009-04-12 12:40:54

标签: c# asp.net-mvc attributes lambda

以某种方式可以将函数发送到另一个函数来运行它。 例如......我希望在一个字段上有一个属性,我可以在其中指定一个方法,该方法将被发送到另一个传入方法的方法。

不确定这是否有意义,但这是一个小例子。

[ValidateIf(x=>x.test())]
public string test { get; set; }

更新 基本上我想使用DataAnnotations进行验证,但有时根据系统设置,字段可能不是强制性的......你对我应该的方向有什么建议吗?

3 个答案:

答案 0 :(得分:3)

不幸的是,您不能将委托用作属性的属性。您必须指定方法名称,然后在执行时使用反射创建委托 - 这在编译时查找拼写错误显然不太理想。

可能在IL中可能<(使用等效于MethodInfo指定typeof)但C#不会暴露任何方式这样做:(也许有一天我们将得到infoof运算符......它是如何公开的,我不确定。(将代理类型信息保存在属性中会很好。)

答案 1 :(得分:0)

我不知道这是否符合您的具体目标,但总的来说,如果您希望为您的语言添加数据注释,我建议您查看Spec#。这是C#语言的扩展,允许您向程序添加数据合同,并且似乎可以实现您正在寻找的目标。

http://research.microsoft.com/en-us/projects/specsharp/

答案 2 :(得分:0)

如果您要为域对象添加验证,可以查看NHibernate Validator。

http://nhibernate.info/doc/validator/nhibernate-validator-1-0-0-documentation.html