小编Ole*_*leg的帖子

为什么使用块会吞下异常?

我最近在 using 语句中遇到了异常处理问题。问题是在“使用块”中抛出的异常可能会被吞掉,例如看代码:

class DisposableObject : IDisposable
{
    public void Dispose()
    {
        throw new Exception("dispose");
    }
}

class Program
{
    static void Main()
    {
        try
        {
            using (var obj = new DisposableObject())
            {
                throw new Exception("using");
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,您将在输出中看到 'dispose',第一个异常将被忽略,您将永远不会知道它。经过一番搜索,我找到了关于使用块的常见错误的文章https://msdn.microsoft.com/en-us/library/aa355056(v=vs.110).aspx。但我的问题不是关于如何避免异常吞咽,我想知道为什么 MS 决定使用 block 来解包

try
{
...
}
finally
{
}
Run Code Online (Sandbox Code Playgroud)

而不是其他的,例如他们可以解开使用这样的东西:

//this code prevents exception swallowing
try
{                       
    ...
}
catch (Exception ex)
{
    try
    {
        if (obj != null) …
Run Code Online (Sandbox Code Playgroud)

.net c# using-statement

5
推荐指数
1
解决办法
755
查看次数

T-SQL中的结构类型

据我所知,SQL Server不支持包含其他类型的结构类型,例如,你不能做这样的事情

create type User as(UserId int, Name varchar(10), Address varchar(255))
Run Code Online (Sandbox Code Playgroud)

然后使用它:

declare @user User
set @user.UserId = 10
...
Run Code Online (Sandbox Code Playgroud)

也许有人知道任何有助于模拟这种行为的库/框架,例如它可以是一些使用XML数据类型来保存其值并检索它们的函数集.

我试图解决的问题是在存储过程之间传递大量参数.我有接受近30个参数的程序,而不是将一些逻辑和路径这个参数路由到另一个程序,然后第二个程序为第三个程序制作一些逻辑和路径参数.然后需求发生变化,新参数应添加到所有程序中.对于结构数据类型,它转换为仅在数据类型中添加新字段.另一个优点是可读性.

t-sql sql-server sqldatatypes

3
推荐指数
1
解决办法
3588
查看次数

标签 统计

.net ×1

c# ×1

sql-server ×1

sqldatatypes ×1

t-sql ×1

using-statement ×1