Получу ли я преимущества Dispose, если использую, инициализирую с нулем?

Вы можете сделать это следующим образом:

String s = "1234567890";
System.out.println(java.util.Arrays.toString(s.split("(?<=\\G...)")));

, который производит:

[123, 456, 789, 0]

Регулярное выражение (?<=\G...) соответствует пустой строке, которая имеет последнее совпадение (\G), за которым следуют три символа (...) перед ним ((?<= ))

-2
задан radbyx 19 March 2019 в 08:22
поделиться

2 ответа

Язык C # не включает синтаксис для выражения концепции «владения» объектом или управления временем жизни в отличие от Rust, поэтому от документации API зависит, принимает ли конструктор объекта свои аргументы или нет (и, следовательно, кто получает возможность позвонить .Dispose()). Это не то, что компилятор C # может определить для вас. Однако реализации .Dispose() должны быть идемпотентными в любом случае , поэтому нет никакого вреда в вызове .Dispose() многократных (избыточных) раз.

Просто следуйте идиоматическим соглашениям C # для сложенных using операторов:

using( SqlConnection c = new SqlConnection( connectionString ) )
using( SqlCommand cmd = c.CreateCommand() )
{
    await c.OpenAsync().ConfigureAwait(false);

    cmd.CommandText = "SELECT foo, bar FROM baz";

    using( SqlDataReader rdr = await cmd.ExecuteReaderAsync().ConfigureAwait(false) )
    {
        ...
    }
} 
0
ответ дан Dai 19 March 2019 в 08:22
поделиться

Для меня я предпочитаю использовать второе решение, оно более тонкое, или вы можете использовать мой пример чуть ниже:

using (var sqlConnection = new SqlConnection(connection))
{
       using (var command = new SqlCommand(query, sqlConnection))
       {
            using (var read = command.ExecuteReader())
            {
                // process on your read
            }
       }
}
0
ответ дан sayah imad 19 March 2019 в 08:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: