- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个类有大约十几个方法,如下所示:
public Result Parse(string input)
{
InitLock.EnterReadLock(); //Block while database is being initialized
try
{
return parser.Parse(input);
}
finally
{
InitLock.ExitReadLock();
}
}
返回类型和输入参数不同,但我总是进入读锁,执行某种操作,然后退出读锁。我想知道是否可以创建一个实用函数来为我处理锁定。所以,我想出了这个:
static TResult DoWithLock<T, TResult>(Func<T, TResult> action, T p)
{
InitLock.EnterReadLock(); //Block while database is being initialized
try
{
return action(p);
}
finally
{
InitLock.ExitReadLock();
}
}
现在我可以将上面的方法简化为:
public Result Parse(string input)
{
return DoWithLock(x => parser.Parse(x), input);
}
这是有效的,但是有两件事让我很烦。首先,实用方法假定有一个返回值和一个且只有一个参数。如果我想包装一个具有多个参数或没有返回值的函数,我必须为这些情况创建重载。二,我觉得通过input
有点奇怪到 Func<>
然后使用 x
再次引用它.基本上,x
和 input
是一样的东西。也许我可以引用input
使用闭包,但是我不知道我会传递什么给action()
.
有没有办法改进这个实用方法使其工作得更好一些?
最佳答案
在这里看看我的答案(请注意,这不是公认的答案,但它比公认的答案表现得更好):
https://stackoverflow.com/a/1150287/138304
您的代码简化为:
public Result Parse(string input)
{
using (InitLock.ReadLock())
{
return parser.Parse(input);
}
}
关于c# - 使用委托(delegate) DRYing 多余的锁定代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696423/
我的服务层有如下方法 public ModuleResponse GetModules(ModuleRequest request) { var response = new ModuleRe
我构建的工具栏与大多数工具栏一样,minHeight 设置为 actionBarSize: 但是,如果我删除这个属性,就完全没有区别了。工具栏保持其 actionBarSize,即使我删除菜单并将
我已经为 SVG 和剪辑路径苦苦挣扎了一段时间。 我正在尝试创建一个三 Angular 形剪辑路径,它将覆盖照片以给顶部一个“三 Angular 形”边缘。 我试图实现与照片完全相同的效果,但三 An
我有一个带有 2 个索引的 PostgreSQL 表。其中一个索引涵盖了 website_id 和 tweet_id 列,是一个唯一的 B 树索引。第二个索引只覆盖 website_id 列,是一个非
我是一名优秀的程序员,十分优秀!