这是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; }
我希望它足够清楚......
谢谢!
答案 0 :(得分:0)
如果你想改变这个:
public Expression<Func<T, long?>> KeySelector { get; set; }
到此(用第二种通用类型替换long
)
public Expression<Func<T, T2>> KeySelector { get; set; }
然后第二个泛型类型必须包含在类定义中。
更改
public class ConnectedObservableCollection<T>
: ObservableRangeCollection<T> where T : EntityData
到
public class ConnectedObservableCollection<T, T2>
: ObservableRangeCollection<T> where T : EntityData