我有以下课程(某些部分是从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从一个函数传递给其他函数作为参数?
答案 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)
否则,您正在对您的属性不可见的对象进行操作。