C#参数属性正则表达式

C#参数属性正则表达式,c#,attributes,C#,Attributes,我正在读实用程序员和合同设计章节。我突然想到,当我们在公共库中创建函数时,指定参数的属性将是一件有用的事情 我想知道是否有人遇到过这样的想法,我不相信它存在于C# public String SendEmail(String ToAddress [RegExMatch(@"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")], FromAddress, Body) 为了可读性,我认为把它放在函数声明之上更有意义 我无法想象这是一个坏主意,因为函数会自动为无效

我正在读实用程序员和合同设计章节。我突然想到,当我们在公共库中创建函数时,指定参数的属性将是一件有用的事情

我想知道是否有人遇到过这样的想法,我不相信它存在于C#

public String SendEmail(String ToAddress [RegExMatch(@"\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b")], FromAddress, Body)
为了可读性,我认为把它放在函数声明之上更有意义

我无法想象这是一个坏主意,因为函数会自动为无效参数抛出异常。但它只会给出比String或Int32多一点的定义

与其说是寻找答案,不如说是一场讨论

干杯,
Mike

也许创建一种新类型来处理这类事情会更好。您可以有一个EmailAddress类型,它可以验证构造或修改时获得的任何字符串参数。那么就不需要属性欺骗了。

我不知道我是否见过一个专门作为契约的正则表达式-但它离检查输入int的有效范围或参数不远了!=空等,这些都是DbC中的标准票价

C#/.NET拥有正式的System.Diagnostics.Contracts。 是一种C#派生语言,添加了DbC。我假设.NET4的大部分代码契约都是不符合规范的,所以我不确定在这一点上规范还提供了多少


我不是DbC的人,但我认为让你知道可能有用;是的,人们正在这样做,是的,你的建议当然是可行和合理的(尽管众所周知,电子邮件地址很难用正则表达式验证,因此你可能需要一个不同的例子)。

有效的电子邮件地址如何
a+1@a-博物馆
?一个好问题,但我的正则表达式只是一个例子。欢迎在电子邮件的终极正则表达式上开始提问。:)我喜欢这个主意。我可以让它像RegularExpressionValidator一样工作。我想我会看一看并做一个证明。一些(大多数?)DbC实现允许静态检查至少一部分契约和参数。正常的
抛出新异常()不会服从的。最后,我想说,DbC方法与所建议的OO方法相结合将是最强大的——但也很可能是过火了。有趣的阅读,谢谢。感觉有点受WCF影响。但我肯定会读一读。谢谢