c# - 无法跳出finally block

标签 c# try-catch

我正在尝试从函数返回一个值。函数 WcfProvider.MetalsPrices 可能会引发异常。我想避免它。

public IEnumerable<PriceOfMetal> GetPrice(int id, DateTime time)
{
        bool condition = false;
        DateTime timenew = time.AddDays(-1);

        var allPrice = from c in db.PriceOfMetal
                       select c;

        foreach (var i in allPrice)
        {
            if (i.Date.Date == timenew.Date && i.ListOfMetaL_Id==id)
            {
                condition = true;
            }
        }

        try
        {
            if (condition == false)
            {
                var price = WcfProvider.MetalsPrices(id, time, time).Tables[0].AsEnumerable()
                    .Select(
                        a =>
                            new PriceOfMetal()
                            {
                                Date = a.Field<DateTime>("Date"),
                                ListOfMetaL_Id = a.Field<int>("MetalId"),
                                Value = a.Field<System.Double>("Price")
                            })
                    .ToList().Single();

                db.PriceOfMetal.Add(price);
                db.SaveChanges();
            }
        }
        finally 
        {
            var all = from c in db.PriceOfMetal select c;
            return all;
        }

我想最终返回 block 的值。是否可以?我收到一个错误。

最佳答案

如果内部发生异常,您必须决定您的函数是正常返回还是异常返回。

如果异常(你的调用者会看到异常):

try {
    // do stuff
    return answer;
}
finally {
    // cleanup stuff
}

如果正常,需要处理异常:

try {
    // do stuff
}
catch {
    // recover stuff        
}
// cleanup stuff
return answer;

您永远不能将 return 语句放在 finally block 中,因为 finally 在存在未捕获的异常时运行,并且当您的函数运行时由于未捕获的异常而结束(异常),没有返回值。

关于c# - 无法跳出finally block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651911/

相关文章:

c# - 无法使用 C# 中的参数化查询在 MS Access 中插入数据

c# - 忽略 BinaryFormatter 序列化中的非序列化属性

c# - 如何在 Windows 窗体应用程序中获取 VPN 用户的当前用户身份?

vb.net - 捕获Access DB错误(FormatException)并返回自定义消息?

java - 关于最终重抛

c# - 如何为 Web API 指定不同的 AADInstance?

c# - HTMLAgilityPack XPath 表达式未获取所有节点

powershell - 试试看:如果TRY成功完成,请采取一些措施

c# - Will Try Catch effect Performance 如果用于监视不会发生运行时异常的代码

java - 如何为 try & catch 实现指数延迟/ sleep