Использование блока без фигурных скобок или точки с запятой имеет подразумеваемое тело:
public Task<string> GetElidingKeywordsAsync(string url)
{
using (var client = new HttpClient())
return client.GetStringAsync(url); // using body
}
Это может быть нормализовано до:
public Task<string> GetElidingKeywordsAsync(string url)
{
using (var client = new HttpClient())
{
return client.GetStringAsync(url);
}
}
Или записано более компактно в C # 8.0:
public Task<string> GetElidingKeywordsAsync(string url)
{
using var client = new HttpClient();
return client.GetStringAsync(url);
}
Если вы добавите точку с запятой, будет пустое тело, дающее поведение, описанное вами в OP:
public Task<string> GetElidingKeywordsAsync(string url)
{
HttpClient client;
using (client = new HttpClient()); // gets disposed before next statement
return client.GetStringAsync(url); // don't be fooled by the indent
}
Это можно нормализовать до:
public Task<string> GetElidingKeywordsAsync(string url)
{
HttpClient client;
using (client = new HttpClient())
{
}
return client.GetStringAsync(url);
}