【发布时间】:2014-03-13 20:39:23
【问题描述】:
假设我有一个三元运算:
db.Scanners.FirstOrDefault(s => s.ScannerID==24) != null
? db.Scanners.FirstOrDefault(s => s.ScannerID==24).FriendlyName
: "N/A";
我想写一个 LINQ 扩展来隐藏操作。我最好的尝试是:
public static object PropertyOrNull<T>(this T source, string property)
{
if (source == null || source.GetType().GetProperty(property) == null)
return null;
return source.GetType().GetProperty(property).GetValue(source, null);
}
我现在可以通过以下方式拨打电话:
(string)db.Scanners.FirstOrDefault(s => s.ScannerID == 24)
.PropertyOrNull("FriendlyName");
但这很丑。有没有办法在我不必装箱和拆箱返回值的情况下重新工作?我对扩展/泛型很陌生,如果这很简单,请原谅我。
【问题讨论】:
-
这不是 LINQ 扩展。这只是一个扩展。 LINQ 只是
System.Linq命名空间中的扩展方法的集合。您不是在那里添加一个,而是在其他地方添加自己的扩展。
标签: c# generics reflection extension-methods