2016-01-19 74 views
2

下面的示例編譯成功。
編譯器可以推斷e(客戶)的類型
我的問題是爲什麼Intellisense不能做到這一點?
當I型customer.SetValue(它正確地表明,該方法預計智能感知不能從延伸方法推斷類型

Expression<Func<Customer, TProperty>> 

但是當I型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

更新
它是不相關的表達<>中,該方法可以改變到

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

更新2
我可以

  • VS 2015重現它企業
  • VS 2015年社區版

這似乎是在工作(沒有測試過其他版本)

  • VS 2013終極
  • VS 2013高級
+1

提交bug報告我有這種情況發生了好幾次,約每隔一週一次。關閉並重新打開VS通常會爲我修復它,但它仍然很煩人。 – JRLambert

+0

我肯定一些代碼,以保持小問題被省略了,但我可以問一個擴展的目的設置的屬性? – Wobbles

+1

看起來像一個錯誤,可能與Roslyn有關。 – galenus

回答

-1

這是預期或這是一個錯誤?

這不是真的。

雖然智能感知是有幫助你儘可能的,它從來沒有聲稱正確地解析代碼中的每一個聲明。傳統上,C++及其複雜的基於宏的聲明會帶來更多問題,但您偶爾也會遇到C#中的問題。

您可以在此打開一個連接問題,如果你想要的,但比它的東西,你可以很容易地與其他生活,所以不要指望太快的響應(2017年考慮,而不是2015年更新2)。

+1

感謝您的答案@Bindy,但由於它在以前的版本中工作,我認爲這是一個錯誤 –