我試圖編寫一個流暢的接口,它能夠在設計時檢測作爲Linq表達式傳遞的屬性類型,並根據該類型的評估返回一個接口。設計時動態返回接口
例如:
public class Searchable<Person>
{
public Searchable()
{
CanSearch(x => x.Name)
.Include(StringOperations.Contains);
CanSearch(x => x.Age)
.Exclude(NumericOperators.GreaterThan);
}
}
內CanSearchMethod,我希望能夠做這樣的事情:
public IOperations CanSearch(Expression<Func<T, object>> expression)
{
var type = (/* Code to pick apart expression */);
if(type == typeof(int))
return new ClassImplementingINumericOperations();
if(type == typeof(string))
return new ClassImplementingIStringOperations();
if(type == typeof(IEnumerable))
return new ClassImplementingIIEnumerableOperations();
return null;
}
包含和排除方法不同的接口由一個僅相差枚舉接受爲參數:
public interface IOperations
{
}
public interface INumericOperations : IOperations
{
INumericOperations Include(NumericOperationsEnum op);
INumericOperations Exclude(NumericOperationsEnum op);
}
public interface IStringOperations : IOperations
{
IStringOperations Include(StringOperationsEnum op);
IStringOperations Exclude(StringOperationsEnum op);
}
public interface IIEnumerableOperations : IOperations
{
IIEnumerableOperations Include(CollectionOperationsEnum op);
IIEnumerableOperations Exclude(CollectionOperationsEnum op);
}
我懷疑這是不可能的,但我不能它出來comp因爲動態可以做一些時髦的魔法。
我看了一些其他流利的接口,但似乎沒有評估表達式,以確定設計時返回什麼類型。
我要試一試。謝謝! – 2013-02-26 22:00:21