簡體   English   中英

如何將實例方法作為委托傳遞

[英]How to pass instance method as a delegate

我有這個與EF一起使用的方法

RetryGetWithExpression<city, List<city>>(u => u.Take(10).ToList());

public static TValue RetryGetWithExpression<T, TValue>(
        Func<ObjectSet<T>, TValue> func)
    where T : class
{
    var entitySet = entitiesContext.CreateObjectSet<T>();
    return func(entitySet);
}

上面的代碼適用於EF生成的表實體。 我想要做的是以與存儲過程一起使用的方式更改代碼。

這是執行SP的代碼:

Entities G = new Entities();
ObjectResult<retrieveMedia_Result> F = G.retrieveMedia(1);

當我嘗試將RetryGetWithExpression轉換為接受SP時,我遇到了一個問題,即retrieveMedia是實例方法而我無法將其作為u.retrieveMedia傳遞(1)

RetryGetWithExpression<Entities, ObjectResult<retrieveMedia_Result>>(
    u => u.retrieveMedia(1));

public static TValue RetryGetWithExpression<T, TValue>(
        Func<ObjectSet<T>, TValue> func)
    where T : class
{

}

如何更改上面的代碼,以便它與SP一起使用?

嘗試

RetryGetWithExpression<ObjectResult<retrieveMedia_Result>>(u => u.retrieveMedia(1));

public static TValue RetryGetWithExpression<TValue>(Func<Entities, TValue> func)
{
    return func(entitiesContext);
}

有點像,

public static TValue RetryGetWithExpression<TParam, TValue>(
        Func<TParam, TValue> func,
        TParam parameter)
{
    return func(parameter);
}

你會打電話給誰,

Entities g = new Entities();
ObjectResult<retrieveMedia_Result> f = 
    RetryGetWithExpression<int?, ObjectResult<retrieveMedia_Result>>(
        g.retrieveMedia,
        1);

但是,它似乎毫無意義,因為你要做的就是傳遞一個函數委托並調用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM