1
這裏是我在Stack Overflow中的第一個問題。所以,請耐心等待,我希望我能指出你對我的問題...(對不起,如果這是一個重複,但我搜查了很多,我無法找到我正確的問題的答案,也沒有我可以從其他答案中找出它)。具有通用參數的表達式屬性
讓我先告訴你代碼,這樣你可以得到一些上下文(擾流板:我遇到的問題是keySelector
)。
我在一類這種方法:
public class BaseTableDataStore<T> : BaseTableDataStore, ITableDataStore<T> where T : Models.EntityData
{
...
public virtual async Task<IEnumerable<T>> GetItemsQueryAsync<Tkey>(Expression<Func<T, bool>> predicate, Expression<Func<T, Tkey>> keySelector)
{
...
return await Table.Where(predicate).OrderBy(keySelector).ToEnumerableAsync();
...
}
...
}
然後,我有這樣的其他類:
public class ConnectedObservableCollection<T> : ObservableRangeCollection<T> where T : EntityData
{
ITableDataStore<T> table;
public Expression<Func<T, bool>> Predicate { get; set; }
public Expression<Func<T, long?>> KeySelector { get; set; }
...
public async Task Refresh()
{
...
_items = await table.GetItemsQueryAsync(Predicate, KeySelector);
...
}
...
}
最後,我在另一個類中以下代碼:
ConnectedObservableCollection<MeterEntry> meterEntries;
...
meterEntries.Predicate = (s => s.Type == 1);
meterEntries.KeySelector = (s => s.Value);
await MeterEntries.Refresh(wait);
...
當然,當s.Value
是long?
時,這當然會工作正常。不過,我想使這個屬性通用的,所以我可以使用任何類型的參數,而不是僅僅long?
public Expression<Func<T, long?>> KeySelector { get; set; }
我希望這是不夠清楚......
謝謝!
感謝您的回答!是的,這是有效的,但後來我需要更改ConnectedObservableCollection meterEntries;到ConnectedObservableCollection meterEntries; (或任何其他類型我想用於每個實例,我想知道是否有一種方式,類聲明不會改變,我處理KeySelector屬性的某種方式。 –