Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将一个方法传递给另一个方法_C#_Asp.net Mvc_Attributes_Lambda - Fatal编程技术网

C# 将一个方法传递给另一个方法

C# 将一个方法传递给另一个方法,c#,asp.net-mvc,attributes,lambda,C#,Asp.net Mvc,Attributes,Lambda,是否有可能将一个函数发送到另一个函数以使其运行。 例如…我想在一个字段上有一个属性,在该字段中我可以指定一个方法,该方法将被发送到另一个方法,在该方法中传递的方法将被运行 不确定这是否有意义,但这里有一个小例子 [ValidateIf(x=>x.test())] public string test { get; set; } 更新: 基本上,我想使用DataAnnotation进行验证,但有时根据系统设置,字段可能不是必需的……您对我应该使用的方向有什么建议吗?不幸的是,您不能将委托用

是否有可能将一个函数发送到另一个函数以使其运行。 例如…我想在一个字段上有一个属性,在该字段中我可以指定一个方法,该方法将被发送到另一个方法,在该方法中传递的方法将被运行

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

[ValidateIf(x=>x.test())]
public string test { get; set; }
更新:
基本上,我想使用DataAnnotation进行验证,但有时根据系统设置,字段可能不是必需的……您对我应该使用的方向有什么建议吗?

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


在IL中这可能是可能的(使用与
typeof
等效的
MethodInfo
指定一个
MethodInfo),但C#不会公开任何这样做的方法:(也许有一天我们会得到
infoof
操作符……我不确定它将如何公开。(最好将委托类型信息保留在属性中。)

我不知道这是否能满足您的特定目标,但一般来说,如果您希望在语言中添加数据注释,我建议您查看Spec#。这是C#语言的一个扩展,允许您将数据契约添加到您的程序中,似乎可以实现您想要的目标


如果您希望向域对象添加验证,可以查看NHibernate Validator


基本上,我想使用数据注释进行验证,但有时根据系统设置,字段可能不是必需的……您对我应该使用的方向有什么建议吗?