C#泛型try catch方法转换
C# generic try catch method conversion
我正在开发一个包含多个服务的代码库,这些服务会出现超时异常。
我的想法是创建一个通用方法,将服务方法作为参数并returns方法调用。
我的问题是,当我调用此方法并传入一个 returns int 列表的方法时,出现错误,因为它无法从 system.collections.generic.list...
转换为 system.func.system.collections.generic.list...
我发现一个 post 试图相应地转换,但我不想转换。我只想要字符串列表,而不是给我字符串列表的函数。我不太确定从这里去哪里?
private U HandleTimeoutException<U>(Func<U> fn)
{
U result = default(U);
try
{
result = fn();
}
catch (TimeoutException)
{
//some code that handles the exception
};
return result;
}
编辑:
我的方法调用是:
HandleTimeoutException<List<id>>(getListofIds(fName,lName,regionId));
我认为 c# 不会让我将方法签名作为参数传递,因为签名本身有 3 个参数,或者因为它评估方法并认为它正在获取 Id 列表作为参数。无论如何,我可以使用委托来调用 getListofIds(X,Y,Z) 并将该委托传递给我的通用 try/catch 函数吗?
感谢任何建议!
您所做的不是将函数传递给 HandleTimeoutException
,而是传递 getListofIds
方法的结果。
这将修复它:
HandleTimeoutException(() => getListofIds(fName, lName, regionId));
注意:您甚至不必指定模板参数类型。
我正在开发一个包含多个服务的代码库,这些服务会出现超时异常。
我的想法是创建一个通用方法,将服务方法作为参数并returns方法调用。
我的问题是,当我调用此方法并传入一个 returns int 列表的方法时,出现错误,因为它无法从 system.collections.generic.list...
转换为 system.func.system.collections.generic.list...
我发现一个 post 试图相应地转换,但我不想转换。我只想要字符串列表,而不是给我字符串列表的函数。我不太确定从这里去哪里?
private U HandleTimeoutException<U>(Func<U> fn)
{
U result = default(U);
try
{
result = fn();
}
catch (TimeoutException)
{
//some code that handles the exception
};
return result;
}
编辑:
我的方法调用是:
HandleTimeoutException<List<id>>(getListofIds(fName,lName,regionId));
我认为 c# 不会让我将方法签名作为参数传递,因为签名本身有 3 个参数,或者因为它评估方法并认为它正在获取 Id 列表作为参数。无论如何,我可以使用委托来调用 getListofIds(X,Y,Z) 并将该委托传递给我的通用 try/catch 函数吗?
感谢任何建议!
您所做的不是将函数传递给 HandleTimeoutException
,而是传递 getListofIds
方法的结果。
这将修复它:
HandleTimeoutException(() => getListofIds(fName, lName, regionId));
注意:您甚至不必指定模板参数类型。