如何将lambda从一个函数传递给其他函数作为参数?

时间:2018-02-28 11:46:32

标签: c#

我有以下课程(某些部分是从here复制的):

GetValue()

以下是我在课堂上使用的方式:

field.Body as MemberExpression

所以,如果我直接调用null函数,它的效果都很好。但是,我需要在多个位置使用此逻辑,这就是为什么我将它放在单独的函数中并从其他函数调用(如GetColumnName())。在这种情况下,它不起作用。在这种情况下,public评估为private

我不想将rails_admin公开为for xlsx file content_type = "application/zip" for csv file content_type = "text/plain" for pdf file content_type = "application/pdf" for word file content_type = "application/zip" for image file content_type = "image" ;它将是content_type函数。

如何将lambda从一个函数传递给其他函数作为参数?

2 个答案:

答案 0 :(得分:4)

问题是你的C#代码实际上包含了一个类型转换,你在C#中看不到,但是因为期望的类型是Expression<Func<object>>而在Expression上发生了(注意{ {1}}!)。

object

实际上是:

() => MyClass.StaticProperty

() => (object)MyClass.StaticProperty 部分会转换为(object)。突然之间,这不再是Convert(MyClass.StaticProperty),而是MemberExpression

您可以通过使方法通用来阻止所有这一切,从而避免对UnaryExpression进行必要的强制转换:

object

答案 1 :(得分:1)

将GetValue方法的签名更改为:

public string GetValue<T>(Expression<Func<T>> field)

否则,您正在对您的属性不可见的对象进行操作。