c# - 具有两个泛型参数和推理的 C# 泛型方法
问题描述
我有一个关于具有两个泛型参数的泛型方法的问题。想象一下:
public class A
{
public string PropertyA {get;set;}
}
---------------------------------------------------------------------------
private string GetProperty<T, P>(Expression<Func<T, P>> expressionProperty)
where T : class
{
return ((MemberExpression)expressionProperty.Body).Member.Name;
}
---------------------------------------------------------------------------
void Main()
{
GetProperty<A>(x => x.PropertyA).Dump();
}
这不会编译:
CS0305 使用通用方法“UserQuery.GetProperty(Expression>)”需要 2 个类型参数
所以我必须这样调用方法:
void Main()
{
GetProperty<A,string>(x => x.PropertyA).Dump();
}
为什么编译器不能推断PropertyA
类型?
解决方案
因为您需要显式传递所有泛型参数或 0 个参数,以便编译器可以推断出所有这些参数。干扰部分不起作用。但是,您可以这样做:
void Main()
{
GetProperty((A x) => x.PropertyA).Dump();
}
推荐阅读
- javascript - Fomantic-UI - 使用设置初始化下拉菜单
- bash - 高效可靠地检测和删除损坏的空填充文件
- excel - 无法使用 VBA 提取 Span 标题 HTML 值的内部文本
- python - Python:为什么我的原始列表在更新复制列表后受到影响
- ios - Xcode 错误有关 plist 的额外信息:ACL=
- javascript - 为什么只读输入不会在 iPad 上的 Tab 键按下时触发焦点事件?
- c# - C# 8 不可为空的引用和隐式使用
- c - 同步两个线程
- sql - 插入日期,Oracle 12,Flyway
- c# - 根据放置在其内部列表属性上的条件对列表进行排序