标签: using

Java相当于C#'using'语句

可能重复:
java中的"using"关键字

我正在从C#转换到java,所以请耐心等待...

在C#中读取文件时,只需将其全部包装在一个大的"使用"块中,这样如果您有异常,该文件仍将被关闭.像这样(可能不准确,但你明白了):

using(FileStream fs = new FileStream("c:\\myfile.txt")) {
  // Any exceptions while reading the file here won't leave the file open
}
Run Code Online (Sandbox Code Playgroud)

java 5或6中是否有方便的等价物?我得到的印象是,最近java一直在"借用"来自c#的一些语法糖(例如foreach),所以如果有一个类似于使用这些天的java,我也不会感到惊讶.

或者我只需要使用try..finally块?我认为'使用'真是太好了......

c# java using exception file

15
推荐指数
1
解决办法
2万
查看次数

typedef和using之间有什么区别?

使用之间有什么区别

typedef Some::Nested::Namespace::TypeName TypeName;
Run Code Online (Sandbox Code Playgroud)

要么

using Some::Nested::Namespace::TypeName;
Run Code Online (Sandbox Code Playgroud)

提供TypeName当地范围的速记?

c++ typedef using

15
推荐指数
3
解决办法
1857
查看次数

类似于"使用"的东西会创建一个对象并在完成时调用它的方法,但让我做我想要的

我正在使用Lidgren,并且对于我制作的每种新类型的消息,我最终都编写了相同类型的代码.我正在创建一个实例NetOutgoingMessage,在其上运行各种赋值调用,然后在完成后发送它.创建和发送是一样的,所以我想写一个包装器来为我做这个,但它是一个sealed类,它不是IDisposable.我正在做的是:

NetOutgoingMessage om = server.CreateMessage();

om.Write(messageType);
om.Write(data1);
om.Write(data2);

server.SendMessage(om, server.Connections, NetDeliveryMethod.UnreliableSequenced, 0);
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

using(AutoNetOutgoingMessage om(server, messageType, NetDeliveryMethod.UnreliableSequenced))
{
    om.Write(data1);
    om.Write(data2);
}
Run Code Online (Sandbox Code Playgroud)

显然我不能这样using做是否有另一种常见的方法,如果实现这样的功能?我不是在寻找一个非常复杂的解决方案,因为这只是关于我的可维护性,所以我没有问题为每条消息重复我的代码.但我很好奇是否有一个有趣的C#技巧我不知道为此.

c# maintainability using

15
推荐指数
2
解决办法
473
查看次数

调用Dispose()vs对象超出范围/方法完成

我有一个方法,里面有一个try/catch/finaly块.在try块中,我声明SqlDataReader如下:

SqlDataReader aReader = null;          
aReader = aCommand.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

finally块中,手动处理的对象是在类级别设置的对象.因此,在该方法的对象,其实现IDisposable,如SqlDataReader上述,他们得到自动处理的?Close()aReader执行while循环后调用,以获取阅读器的内容(应该是Dispose()调用的内容Close()).如果没有调用Close(),当方法完成或对象超出范围时,是否会自动关闭/处置此对象?

编辑:我知道这个using声明,但有些情况令我感到困惑.

c# idisposable using using-statement

14
推荐指数
2
解决办法
1万
查看次数

结构和IDisposable

我想知道为什么不编译?

public static void Main(string[] args)
{
    using (MyStruct sss = new MyStruct())
    {

        sss.s = "fsdfd";// Cannot modify members of 'sss' because it is a 'using variable' 

        //sss.Set(12);    //but it's ok
    }
}

public struct MyStruct : IDisposable
{
    public int n;
    public string s;

    public void Set(int n)
    {
        this.n = n;
    }
    public void Dispose()
    {
        Console.WriteLine("dispose");
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:但它完美无缺.为什么?

public static void Main(string[] args)
        {

            using (MyClass sss = new MyClass())
            {
                sss.Field = "fsdfd"; …
Run Code Online (Sandbox Code Playgroud)

.net c# idisposable using

14
推荐指数
2
解决办法
1万
查看次数

在Google Compute Engine上访问FTP

我在debian-7-wheezy上运行一个实例,我对Google Compute Engine有点新意.我查看了本网站上的支持请求和Google网站上的常见问题解答帖子; 但是我发现没有什么可以完全遵循的.

我知道一小部分关于Linux(管理一个专用的Debian盒子大约6个月),但我也无法从家用PC访问SSH.

我希望逐步了解如何使用WinSCP(或其他文件浏览器)访问FTP/SFTP,以及如何使用Putty从创建实例到连接实例来从家用PC访问SSH .

提前感谢您的帮助,对不起是一个新手.

ftp ssh sftp using google-compute-engine

14
推荐指数
3
解决办法
4万
查看次数

在C#中维护使用指令的"干净"列表有什么好处?

我知道VS2008具有删除和排序功能,可以使用指令清理,Resharper也是如此.除了你的代码"干净"并消除了引用未来可能不存在的命名空间的问题,维护一个"干净"的使用指令列表有什么好处?

更少的代码?编译时间更快?

c# resharper using visual-studio

13
推荐指数
4
解决办法
1070
查看次数

什么是C#"使用"指令?

我在代码示例中看到了这个C#using语句:

using StringFormat=System.Drawing.StringFormat;
Run Code Online (Sandbox Code Playgroud)

那是什么意思?

c# using using-directives

13
推荐指数
3
解决办法
9504
查看次数

为什么'使用'改善C#表现

在大多数情况下,C#编译器似乎可以Dispose()自动调用.像大多数使用模式的情况看起来像:

public void SomeMethod()
{
    ...

    using (var foo = new Foo())
    {
        ...
    }

    // Foo isn't use after here (obviously).
    ...
}
Run Code Online (Sandbox Code Playgroud)

因为foo没有使用(这是一个非常简单的检测),并且由于它没有作为参数提供给另一个方法(这是一个适用于许多用例并且可以扩展的假设),编译器可以自动并立即调用Dispose()而无需开发人员需要做到这一点.

这意味着在大多数情况下,using如果编译器做了一些聪明的工作,那么它就没用了.IDisposable似乎低水平足以让我被编译器考虑在内.

现在为什么不这样做?这不会改善性能(如果开发人员...... 很脏).

c# compiler-construction dispose idisposable using

13
推荐指数
2
解决办法
889
查看次数

内部异步使用块

我在C#中有以下异步函数:

private async Task<T> CallDatabaseAsync<T>(Func<SqlConnection, Task<T>> execAsync)
{
    using (var connection = new SqlConnection(_connectionString))
    {
        connection.Open();
        return await execAsync(connection);
    }
}
Run Code Online (Sandbox Code Playgroud)

它允许执行任何异步函数execAsync,它将SQL连接作为参数并通过提供连接对象并确保它将被正确关闭来使用它来进行数据库调用.

然后从WebApi控制器中的操作调用此函数,如下所示:

public async Task<HttpResponseMessage> MyAction()
{
    Func<SqlConnection, Task<SomeType>> execAsync = (function definition here);
    await CallDatabaseAsync(execAsync);
    return Request.CreateResponse(HttpStatusCode.OK);
}
Run Code Online (Sandbox Code Playgroud)

这一切都很有效,直到我对WebApi操作进行了一次更改:我从中删除了异步/等待.我不想等待数据库调用,因为我不关心结果,我只是想解雇并忘记.

这仍然似乎工作正常 - 即如果我在浏览器中导航到操作的URL我没有得到任何错误.但实际上有一个问题 - 数据库连接没有关闭.在100次调用操作后,连接池达到其默认限制100,并且应用程序停止工作.

我究竟做错了什么?我需要在CallDatabaseAsync()中进行哪些更改,以便绝对确保连接将被关闭,无论如何?

c# using async-await

13
推荐指数
1
解决办法
4152
查看次数