c# - 我可以通过传入 lambda 表达式来获取参数来检查通用对象的属性吗?

标签 c# linq

简单的例子,我有一个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/

相关文章:

c# - 将文件上传到 ftp 会在该文件的末尾添加不需要的(垃圾)字符

c# - 在不使用 .NET 序列化程序的情况下将 Hashtable 转换为 xml 字符串并返回到 HashTable

c# - 如何在添加到字典之前检查键是否存在

c# - 为什么要引用 LambdaExpression?

c# - 如何使用 Xamarin 在 iOS 8 中制作表格单元格和分隔符全宽?

c# - dapper 是否可以指示是否存在字段名称不匹配?

c# - 如何从元组字符串中选择最匹配的字符串

c# - 在 Entity Framework 中查询今天的记录

c# - 将 Lambda 表达式树与 IEnumerable 结合使用

c# - 使用通用函数签名