简单的例子,我有一个Cat
带有 Name
的对象属性(property)。
我有一个类有一个名为 PrintName<T>(T objectToPrint)
的方法
我做不到Console.WriteLine(objectToPrint.Name)
因为它的类型是 T
.
那么我可以将参数作为获取名称的 linq 表达式传入吗?类似的东西;
Cat c = new Cat("Bernard the Cat");
PrintName(cat, parameter: c => c.Name);
那么 PrintName 就可以了
Console.WriteLine(cat.RunLinq(parameter));
最佳答案
好吧,您可以使用接口(interface),但如果属性可以更改,您也可以这样做。
第一个解决方案:如果您需要属性的名称
PrintName<T>(T objectToPrint, Expression<Func<T, object>> property)
用法
PrintName(cat, c=> c.Name)
然后获取属性的“名称”,诸如此类。
var name = (property.Body as MemberExpression).Member.Name
第二种解决方案:如果您需要属性的值
如果您想要属性的值,请使用 Func<T, object> func
参数
// object if you don't know the type of the property,
// you can limit it to string if needed, of course
PrintName<T>(T objectToPrint, Func<T, object> func)
用法
PrintName(cat, c => c.Name)
然后
var value = func(cat)
关于c# - 我可以通过传入 lambda 表达式来获取参数来检查通用对象的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877573/