我甚至不确定这是否可行,但我已经用尽所有想法来解决这个问题,所以我想我会把它发送给社区并看看你的想法。而且,如果不可能,也许你也有一些想法。
我正在尝试创建一个Attribute类,我可以将其添加到一个允许我使用lambda表达式获取方法的每个参数的方法
public ExampleAttribute : Attribute
{
public object Value { get; set; }
public ExampleAttribute(--something here to make the lambda work--, object value)
{
Value = value;
}
}
我希望能够做到以下这样的事情:
[Example(x=>x.Id, 4)]
[Example(x=>x.filter, "string value")]
public ActionResult Index(int Id, string filter)
{
return View();
}
据我所知,我可能完全梦想着这个想法。我基本上试图编写一个模型来允许自我记录的REST API文档。在最近的一个项目中,我们写了十几个服务,每个服务有5到15个方法,我认为写一些东西要比这更容易,而不是为每个方法编写一个文档页面。我计划最终将它作为一个开源项目发布,一旦我把它放在一个我认为可以释放的地方。
答案 0 :(得分:5)
我不相信这是可能的,但我认为你无论如何都不需要。相反,您可以将属性直接放在参数上,如下所示:
public ActionResult Index(
[Documentation("the identifier...")]
int id,
[Documentation("The filter")]
string filter
)
{
return ...;
}
然后,您可以使用ParameterInfo.GetCustomAttributes获取参数的属性。
答案 1 :(得分:1)
如果您可以将委托作为参数传递给属性,那就太棒了。可能性是无止境。不幸的是,它目前无法实现,但它位于radar。
答案 2 :(得分:0)
为什么重新发明轮子(至少记录)?
Microsoft有一个标准的文档结构XML documentation,可以编译成.chm
文档文件。
使用三///
符号记录您的方法:
/// <summary>MyMethod is a method in the MyClass class.
/// <para>Here's how you could make a second paragraph in a description. <see cref="System.Console.WriteLine"/> for information about output statements.</para>
/// <seealso cref="MyClass.Main"/>
/// </summary>
public static void MyMethod(int Int1)
{
}`
然后,您可以使用<param name='Int1'>This is an int.</param>
xml来定义任何参数值。
一旦记录了您的类和方法,就可以使用Sandcastle将其编译为html帮助文件。
生成XML文件:
为了帮助您,我推荐一个名为GhostDoc的工具,它为方法提供上下文菜单文档生成。它没有提供完美的文档,但它提供了良好的通用结构。
与Sandcastle结合使用,XML文档是记录代码和程序集的绝佳工具。
答案 3 :(得分:0)
据我所知,属性参数仅限于bool,byte,char,double,float,int,long,short,string,object,System.Type和enum类型,具有公共可访问性和上述类型的单维数组
答案 4 :(得分:0)
不,这是不可能的。允许值列表在C#语言规范的第17.2节中介绍。它仅限于
Lambda表达式不适合任何这些类别