下面的示例編譯成功。
編譯器可以推斷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高級
提交bug報告我有這種情況發生了好幾次,約每隔一週一次。關閉並重新打開VS通常會爲我修復它,但它仍然很煩人。 – JRLambert
我肯定一些代碼,以保持小問題被省略了,但我可以問一個擴展的目的設置的屬性? – Wobbles
看起來像一個錯誤,可能與Roslyn有關。 – galenus