时间:2019-03-07 标签:c#multipleexpressionparameter
我正在尝试创建一个方法签名,该方法签名采用不同类型的多个属性,
我将其称为如下:
AllPropertiesExcept(() => Property1, () => Property2)
此方法几乎可以工作,只是属性的类型必须相同。我只会使用属性名称,但希望使用 lambda 表达式来轻松重构。
public static string MyMethod<T>(params Expression<Func<T>>[] propertyExpression)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我会使用
AllPropertiesExcept(params Expression>[] properties)
,您仍然可以从中获取属性名称,但属性是什么类型并不重要。编辑:但是,我倾向于以相反的方式使用它 - 我不会排除我不想看到的属性,而是包含我想看到的属性。原因很简单 - 为了让你的方式工作,你仍然需要反射 - 按照我的方式,你可以轻松地使用你得到的
Func
直接获取实际数据。编辑 2(从表达式中获取属性名称):
我真的建议您使用 LinqPad 来完成此类操作,您可以通过
Dump()
轻松向下钻取对象,这会非常用户友好地显示对象。只需重新创建一个小示例并进行实验即可。I would use
AllPropertiesExcept(params Expression<Func<object>>[] properties)
, you can still get the property names out of it, but it doesn't matter what type the property is.Edit: However, I would tend to use it the other way round - instead of excluding properties I don't want to see, I would include properties I want to see. The reason is simple - to make your way work, you still need reflection - with my way, you could easily use the
Func
you get to get the actual data directly.Edit 2 (getting the property name out of an expression):
I can really advise you to use LinqPad for such things, you can easily drill down objects via
Dump()
, which displays the objects very user friendly. Just recreate a small example and experiment.AllPropertiesExcept()
方法是否返回任何内容?否则,您可以创建一个流畅的接口(使用方法链):即使
AllPropertiesExcept()
方法返回某些内容,您也可以推迟执行,直到调用方法链末尾的方法:Does the method
AllPropertiesExcept()
return anything? Otherwise you could make a fluent interface (using method chaining):Even if the
AllPropertiesExcept()
method returns something, you can defer the execution until you invoke a method at the end of the method chain:我认为您需要的是理解此处记录的 ModelMetadata 类:
http://msdn.microsoft.com/en-us /library/system.web.mvc.modelmetadata.aspx
此类在 ASP.NET MVC 中用于 Html.LabelFor(x -> x.Name) 等情况
表达式被传递到此处记录的 ModelMetadata.FromLambdaExpression 方法:
http://msdn.microsoft.com/en-us/library/ee428393.aspx
了解它在 MVC 中的使用方式后,您可以通过了解它在其他地方的应用方式来创建自己的代码。
I think what you need is to understand the ModelMetadata class documented here:
http://msdn.microsoft.com/en-us/library/system.web.mvc.modelmetadata.aspx
This class is used in ASP.NET MVC in situations like Html.LabelFor(x -> x.Name)
An expression is passed to the ModelMetadata.FromLambdaExpression Method documented here:
http://msdn.microsoft.com/en-us/library/ee428393.aspx
After understanding how it is used in MVC, you could create your own code with some informed knowledge of how it was applied elsewhere.