Учитывая следующие два класса:Вывод типа класса из статического метода/вызывающего?
public class ABC
{
public void Accept(Ordering<User> xyz)
{
// Do stuff with xyz...
}
}
public class Ordering<TEntity>
where TEntity : class
{
private readonly Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> Transform;
private Ordering(Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> transform)
{
this.Transform = transform;
}
public static Ordering<TEntity> By<TKey>(Expression<Func<TEntity, TKey>> expression)
{
return new Ordering<TEntity>(query => query.OrderBy(expression));
}
public static Ordering<TEntity> ByDescending<TKey>(Expression<Func<TEntity, TKey>> expression)
{
return new Ordering<TEntity>(query => query.OrderByDescending(expression));
}
public Ordering<TEntity> ThenBy<TKey>(Expression<Func<TEntity, TKey>> expression)
{
return new Ordering<TEntity>(query => this.Transform(query).ThenBy(expression));
}
public Ordering<TEntity> ThenByDescending<TKey>(Expression<Func<TEntity, TKey>> expression)
{
return new Ordering<TEntity>(query => this.Transform(query).ThenByDescending(expression));
}
public IOrderedQueryable<TEntity> Apply(IQueryable<TEntity> query)
{
return Transform(query);
}
}
Используется следующим образом:
ABC abc = new ABC();
abc.Accept(Ordering<User>.By(u => u.Id));
Есть ли способ, чтобы определить тип T
так:
abc.Accept(Ordering.By(u => u.Id));
Я просто это понял. Я просто понял, что мне нужно обновить свой вопрос, чтобы воспроизвести мою проблему. См. Мое редактирование выше. – TheCloudlessSky
Проблема в том, что я фактически передаю выражение Expression> в качестве параметра. –
TheCloudlessSky
@TheCloudlessSky: Боюсь, не видя больше деталей, трудно понять, что рекомендовать. –