我可以在C#*中使用*块使用不同类型的对象吗?

时间:2010-06-22 10:20:25

标签: c# using

using (Font font3 = new Font("Arial", 10.0f), 
           font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

我知道在使用子句中可以使用多个相同类型的对象。

我不能在使用子句中使用不同类型的对象吗?

我试过但是虽然它们的名称和对象不同,但它们的行为相同=具有相同的方法集

有没有其他方法可以使用不同类型的using类?

如果没有,最合适的使用方法是什么?

7 个答案:

答案 0 :(得分:28)

using(Font f1 = new Font("Arial",10.0f))
using (Font f2 = new Font("Arial", 10.0f))
using (Stream s = new MemoryStream())
{

}

喜欢这样吗?

答案 1 :(得分:10)

不,你不能这样做,但你可以nest using块。

using (Font font3 = new Font("Arial", 10.0f))
{ 
    using (Font font4 = new Font("Arial", 10.0f))
    {
        // Use font3 and font4.
    }
}

或正如其他人所说,但由于可读性,我不推荐这样做。

using(Font font3 = new Font("Arial", 10.0f))
using(Font font4 = new Font("Arial", 10.0f))
{
    // use font3 and font4
}

答案 2 :(得分:6)

您可以使用语句堆叠来完成此任务:

using(Font font3 = new Font("Arial", 10.0f))
using(Font font4 = new Font("Arial", 10.0f))
{
    // use font3 and font4
}

答案 3 :(得分:5)

using语句的目的是保证通过调用Dispose接口提供的IDisposable方法显式处理获取的资源。规范不允许您在单个using语句中获取不同类型的资源,但考虑到第一句话,您可以根据编译器编写这个完全有效的代码。

using (IDisposable d1 = new Font("Arial", 10.0f),
    d2 = new Font("Arial", 10.0f), 
    d3 = new MemoryStream())
{
    var stream1 = (MemoryStream)d3;
    stream1.WriteByte(0x30);
}

然而,我不推荐这个,我认为这是滥用的,所以这个答案只是声明你可以破解它,但你可能不应该。

答案 4 :(得分:3)

每个using块中只能初始化一种类型的对象。您可以根据需要嵌套那些,但是:

using (Font font3 = new Font("Arial", 10.0f))
{
    using (Brush b4 = new Brush())
    {

    }
}

答案 5 :(得分:3)

你可以逗号分隔相同类型的项目 - 好吧,我所知道的是编译器没有抱怨。您还可以使用不同类型的using()语句(使用一组括号{})进行堆栈。

http://adamhouldsworth.blogspot.com/2010/02/things-you-dont-know.html

答案 6 :(得分:2)

你可以嵌套它们:

using (Font font3 = new Font("Arial", 10.0f))
using (font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

他们应该以相反的顺序处置(首先是font4)。

编辑:

这与:

完全相同
using (Font font3 = new Font("Arial", 10.0f))
{
    using (font4 = new Font("Arial", 10.0f))
    {
        // Use font3 and font4.
    }
}