Возможно, вы просто можете использовать javascript element.scrollTop
вместе с JQuery addClass и removeClass. Я не пробовал это сам.
Вот ссылка переполнения для получения позиции полосы прокрутки: Как получить позицию полосы прокрутки с помощью Javascript?
static Expression<Func<IEnumerable<T>, T>> CreateLambda<T>()
{
var source = Expression.Parameter(
typeof(IEnumerable<T>), "source");
var call = Expression.Call(
typeof(Enumerable), "Last", new Type[] { typeof(T) }, source);
return Expression.Lambda<Func<IEnumerable<T>, T>>(call, source)
}
или
static LambdaExpression CreateLambda(Type type)
{
var source = Expression.Parameter(
typeof(IEnumerable<>).MakeGenericType(type), "source");
var call = Expression.Call(
typeof(Enumerable), "Last", new Type[] { type }, source);
return Expression.Lambda(call, source)
}
Я не совсем понимаю вопрос, но код, написанный dtb, можно было бы записать просто как:
class MyUtils {
public static Expression<Func<IEnumerable<T>, T>> CreateLambda<T>() {
return source => source.Last();
}
}
Код в примере от dtb это почти то же самое, что компилятор C # автоматически генерирует для вас из этого лямбда-выражения (скомпилировано как дерево выражений, потому что возвращаемый тип - Expression
).
Если вы знаете тип во время выполнения, вы можете либо использовать решение с помощью dtb, либо вызвать метод CreateLambda
(см. Выше) с помощью Reflection, который может быть медленнее, но позволяет вам писать код в лямбда-выражении в естественном C #:
var createMeth = typeof(MyUtils).GetMethod("CreateLambda");
LambdaExpression l = createMeth.MakeGenericMethod(yourType).Invoke();
Хорошая вещь в этом подходе состоит в том, что код в CreateLambda
может быть намного сложнее, что было бы действительно сложно сделать, используя деревья выражений явно.