我必須創建一個方法來從指定類型的集合中選擇firts屬性。在泛型方法中僅設置第二個參數類型
我創建了這樣的方法(我已刪除了簡潔某些部分):
public static IQueryable<TResult> SelectFirstPropertyWithType<T, TResult>(this IQueryable<T> source)
{
// Get the first property which has the TResult type
var propertyName = typeof(T).GetProperties()
.Where(x => x.PropertyType == typeof(TResult))
.Select(x => x.Name)
.FirstOrDefault();
var parameter = Expression.Parameter(typeof(T));
var body = Expression.Convert(Expression.PropertyOrField(parameter, propertyName), typeof(TResult));
var expression = Expression.Lambda<Func<T, TResult>>(body, parameter);
return source.Select(expression);
}
而且我可以調用此方法爲:
List<Person> personList = new List<Person>();
// .. initialize personList
personList.AsQueryable()
.SelectFirstPropertyWithType<Person, int>()
.ToList();
,一切工作正常。
但是,我不想將第一個參數類型設置爲Person
,因爲編譯器可以從集合的源中推斷出這個參數類型。有什麼辦法來調用方法類似:
.SelectFirstPropertyWithType<int>()
的問題是我需要我的方法裏面T
參數,我不希望在運行時反射創建Func
。
謝謝。
有關於這個很多類似的問題。答案很簡單 - 你不能做那樣的事情。編譯器可以推斷所有類型或沒有。 –