Intellisense不能从扩展方法推断出类型

时间:2016-01-19 17:44:48

标签: c# .net visual-studio intellisense

以下示例成功编译 编译器可以推断出e(Customer)的类型 我的问题是为什么智能感知不能这样做呢? 当我输入 customer.SetValue(时,它正确显示该方法需要

 Expression<Func<Customer, TProperty>>

但是当我输入 e =&gt; 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&lt;&gt;无关。 ,方法可以改为

public static void SetValue<TEntity, TProperty>(this TEntity instance, Func<TEntity, TProperty> expression, TProperty newValue)

更新2
我可以用

重现它
  • VS 2015 Enterprise
  • VS 2015社区版

似乎正在努力(Haven测试其他版本)

  • VS 2013 Ultimate
  • VS 2013 Premium

2 个答案:

答案 0 :(得分:1)

我已在connect.microsoft.com

提交了错误报告

答案 1 :(得分:-1)

  

这是预期还是错误?

这不是真的。

尽管Intellisense会尽可能地为您提供帮助,但它从未声称要正确解析代码中的每个声明。传统上,这对C ++及其复杂的基于宏的声明来说更是一个问题,但是你时不时地遇到C#中的问题。

如果您愿意,可以在此处打开“连接”问题,但除此之外,您可以轻松地使用它,因此不要期望响应太快(请考虑2017年而不是2015年更新2)