Почему ReSharper не нравится ArgumentNullException.ThrowIfNullOrEmpty(string)?C#

Место общения программистов C#
Ответить
Anonymous
 Почему ReSharper не нравится ArgumentNullException.ThrowIfNullOrEmpty(string)?

Сообщение Anonymous »

Я использую ReSharper 2024.2, но все равно получаю предложение не использовать следующий код:

Код: Выделить всё

    public async Task GetQueryAsync(string query, bool isToBeValidated = true) where T : IEndPointResponse
{
ArgumentNullException.ThrowIfNullOrEmpty(query);
ArgumentNullException.ThrowIfNullOrWhiteSpace(query);
ArgumentNullException.ThrowIfNull(Logger);
Вместо этого мне предлагается использовать

Код: Выделить всё

    public async Task GetQueryAsync(string query, bool isToBeValidated = true) where T : IEndPointResponse
{
ArgumentException.ThrowIfNullOrEmpty(query);
ArgumentException.ThrowIfNullOrWhiteSpace(query);
ArgumentNullException.ThrowIfNull(Logger);
Или

Код: Выделить всё

    public async Task GetQueryAsync(string query, bool isToBeValidated = true) where T : IEndPointResponse
{
if (string.IsNullOrEmpty(query) || string.IsNullOrWhiteSpace(query)) throw new ArgumentNullException(nameof(query));
Проблема в том, что вызов метода производного класса ArgumentException.ThrowIfNullOrEmpty() вернет ArgumentException!
Вот пример, демонстрирующий мою проблему
р>

Код: Выделить всё

[TestFixture]
public class Tests
{
readonly MyClass _testClass = new();
#region Passes due to null being passed in and ArgumentNullException being thrown

[Test]
public void Test_MyMethod_Passes()
{
Assert.Throws(() =>
{
_ = _testClass.Method(null); // passes with ArgumentNullException
});
}

[Test]
public void Test_MyMethodAsync_Passes()
{
Assert.ThrowsAsync(async () => await _testClass.MethodAsync(null).ToListAsync()); // passes with ArgumentNullException
}

#endregion

#region Fails with ArgumentException being returned instead of ArgumentNullException

[TestCase("")]
[TestCase("   ")]
public void Test_MyMethod(string someText)
{
Assert.Throws(() => _testClass.Method(someText)); // fails with ArgumentException not ArgumentNullException
}

[TestCase("")]
[TestCase("   ")]
public void Test_MyMethodAsync_Fails(string someText)
{
Assert.ThrowsAsync(async () => await _testClass.MethodAsync(someText).ToListAsync()); // fails with ArgumentException not ArgumentNullException
}

#endregion
}

public class MyClass
{
public List Method(string? someText)
{
ArgumentNullException.ThrowIfNull(someText);
ArgumentException.ThrowIfNullOrEmpty(someText);
ArgumentException.ThrowIfNullOrWhiteSpace(someText);

var result = new List { "Document1", "Document2" };
return result;
}

public async IAsyncEnumerable MethodAsync(string? someText)
{
ArgumentNullException.ThrowIfNull(someText);
ArgumentException.ThrowIfNullOrEmpty(someText);
ArgumentException.ThrowIfNullOrWhiteSpace(someText);

// Simulate async data fetching
await Task.Delay(100);
yield return "Document1";
yield return "Document2";
}
}
TL;DR
Если мне нужно исключение ArgumentNullException, мне нужно использовать ArgumentNulLException.ThrowIfNullOrEmpty(someText), иначе я получаю ArgumentException.

Подробнее здесь: https://stackoverflow.com/questions/790 ... mptystring
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»