私は多くの方法を持っており、キャッシュにその一部を入れる必要があります。しかし、私はそれがそれぞれの方法を編集したくない。戻り値をパラメータとして動的メソッドを渡すにはどうすればよいですか?
どのようにパラメータとして戻り値を持つ動的メソッドを渡すことができますか?親切に私のコードで私の質問のいくつかのコメントを確認してください。
ありがとうございます。
private string GetUserName(string userId)
{
// how can I pass the method as parameter?
// Method is dynamic and can be any method with parameter(s) and return value
return CacheIt<string>(item => GetUserNameFromDb(userId));
}
private T CacheIt<T>(Action<T> action) // Im not sure if this an Action
{
var key = "UserInfo." + userId; // how can I get the value of the parameter?
var cache = MemoryCache.Default;
var value = (T) cache[key];
if (value != null)
return value;
value = action(); // how can I call the action or the method
var policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(1, 0, 0) };
cache.Add(key, value, policy);
return value;
}
private string GetUserNameFromDb(string userId)
{
return "FirstName LastName";
}
メソッドをパラメータとして渡す必要がある場合は、[delegate](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/using-delegates)を使用する必要があります。 'Action'、' Func'、 'Predicate' [https://stackoverflow.com/questions/566860/delegates-predicate-action-func]のような定義済みの一般的なものがあります。 – royalTS