Intellisense 无法从扩展方法推断类型
Intellisense cannot infer type from extension method
下面的例子编译成功。
编译器可以推断出 e (Customer)
的类型
我的问题是为什么 Intellisense 不能做同样的事情?
当我键入 customer.SetValue( 时,它正确地显示该方法需要
Expression<Func<Customer, TProperty>>
但是当我键入 e => e. 时,它无法理解 e 是客户
这是预期还是错误?
using System;
using System.Linq.Expressions;
using System.Reflection;
namespace ConsoleApplicationExpressionTree
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
customer.SetValue(e => e.Age, 10);
customer.SetValue(e => e.Name, "TheName");
//type here
}
}
public static class Extentions
{
public static void SetValue<TEntity, TProperty>(this TEntity instance, Expression<Func<TEntity, TProperty>> expression, TProperty newValue)
{
if (instance == null)
throw new ArgumentNullException();
var memberExpression = (MemberExpression)expression.Body;
var property = (PropertyInfo)memberExpression.Member;
property.SetValue(instance, newValue, null);
}
}
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
}
我正在使用 VS 2015,.NET 4.6.1
更新
与Expression<>无关,方法可以改成
public static void SetValue<TEntity, TProperty>(this TEntity instance, Func<TEntity, TProperty> expression, TProperty newValue)
更新 2
我可以用
重现它
- VS 2015 企业
- VS 2015 社区版
它似乎可以在(尚未测试其他版本)
- VS 2013 终极版
- VS 2013 高级
Is this expected or is it a bug?
两者都不是。
虽然 Intellisense 会尽可能地帮助您,但它从未声称可以正确解析您代码中的每一个声明。传统上,这更多是 C++ 及其复杂的 macro-based 声明的问题,但有时您也会 运行 在 C# 中遇到问题。
如果你愿意,你可以就此打开一个连接问题,但除此之外,它是你可以轻松接受的东西,所以不要期望响应太快(想想 2017 年而不是 2015 年更新 2)。
提交错误报告
下面的例子编译成功。
编译器可以推断出 e (Customer)
的类型
我的问题是为什么 Intellisense 不能做同样的事情?
当我键入 customer.SetValue( 时,它正确地显示该方法需要
Expression<Func<Customer, TProperty>>
但是当我键入 e => e. 时,它无法理解 e 是客户
这是预期还是错误?
using System;
using System.Linq.Expressions;
using System.Reflection;
namespace ConsoleApplicationExpressionTree
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
customer.SetValue(e => e.Age, 10);
customer.SetValue(e => e.Name, "TheName");
//type here
}
}
public static class Extentions
{
public static void SetValue<TEntity, TProperty>(this TEntity instance, Expression<Func<TEntity, TProperty>> expression, TProperty newValue)
{
if (instance == null)
throw new ArgumentNullException();
var memberExpression = (MemberExpression)expression.Body;
var property = (PropertyInfo)memberExpression.Member;
property.SetValue(instance, newValue, null);
}
}
public class Customer
{
public string Name { get; set; }
public int Age { get; set; }
}
}
我正在使用 VS 2015,.NET 4.6.1
更新
与Expression<>无关,方法可以改成
public static void SetValue<TEntity, TProperty>(this TEntity instance, Func<TEntity, TProperty> expression, TProperty newValue)
更新 2
我可以用
- VS 2015 企业
- VS 2015 社区版
它似乎可以在(尚未测试其他版本)
- VS 2013 终极版
- VS 2013 高级
Is this expected or is it a bug?
两者都不是。
虽然 Intellisense 会尽可能地帮助您,但它从未声称可以正确解析您代码中的每一个声明。传统上,这更多是 C++ 及其复杂的 macro-based 声明的问题,但有时您也会 运行 在 C# 中遇到问题。
如果你愿意,你可以就此打开一个连接问题,但除此之外,它是你可以轻松接受的东西,所以不要期望响应太快(想想 2017 年而不是 2015 年更新 2)。