Предупреждение о перенастройке с inheritdoc и исключением

#c# #visual-studio #resharper

Вопрос:

ReSharper показывает предупреждение о том, что «Исключение CallFailedException не задокументировано» в классе SpotBotClient , в то время как оно должно наследоваться от интерфейса.

Когда я делаю следующее, оно исчезает:

 /// <inheritdoc />
/// <exception cref="T:ElonMuskBot.Core.Exceptions.CallFailedException">Condition.</exception>
public override async Task<Balance> GetBalanceAsync(string asset, CancellationToken ct = default)
{
    var result = await _client.General.GetAccountInfoAsync(ct: ct).ConfigureAwait(false);

    if (!result.Success)
    {
        _logger.LogError(
            $"Error while getting Spot balance for {asset} | Error code: {result.Error?.Code} | Error message: {result.Error?.Message}");
        throw new CallFailedException(
            $"Error while getting Spot balance for {asset} | Error code: {result.Error?.Code} | Error message: {result.Error?.Message}");
    }

    return result.Data.Balances.FirstOrDefault(x => x.Asset.Equals(asset, StringComparison.OrdinalIgnoreCase))
        .ToBalance();
}
 

введите описание изображения здесь

 public interface IBotClient
{
    /// <summary>
    ///     Gets account balance for an asset.
    /// </summary>
    /// <param name="asset">The asset.</param>
    /// <param name="ct">Cancellation token.</param>
    /// <returns>The account balance.</returns>
    /// <exception cref="T:ElonMuskBot.Core.Exceptions.CallFailedException">Thrown if the call fails.</exception>
    Task<Balance> GetBalanceAsync(string asset, CancellationToken ct = default);
}

/// <summary>
///     Abstract base class for implementations of the <see cref="IBotClient" />.
/// </summary>
public abstract class BotClientBase : IBotClient
{
    private readonly IBinanceClient _client;
    private readonly IBinanceSocketClient _socketClient;

    protected BotClientBase(IBinanceClient client, IBinanceSocketClient socketClient)
    {
        _client = client;
        _socketClient = socketClient;
    }

    /// <inheritdoc />
    public abstract Task<Balance> GetBalanceAsync(string asset, CancellationToken ct = default);
}

public class SpotBotClient : BotClientBase
{
    private readonly ILogger<SpotBotClient> _logger;
    private readonly IBinanceClient _client;
    private readonly IBinanceSocketClient _socketClient;

    public SpotBotClient(ILogger<SpotBotClient> logger, IBinanceClient client, IBinanceSocketClient socketClient) :
        base(client, socketClient)
    {
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
        _client = client;
        _socketClient = socketClient;
    }

    /// <inheritdoc />
    public override async Task<Balance> GetBalanceAsync(string asset, CancellationToken ct = default)
    {
        var result = await _client.General.GetAccountInfoAsync(ct: ct).ConfigureAwait(false);

        if (!result.Success)
        {
            _logger.LogError(
                $"Error while getting Spot balance for {asset} | Error code: {result.Error?.Code} | Error message: {result.Error?.Message}");
            throw new CallFailedException(
                $"Error while getting Spot balance for {asset} | Error code: {result.Error?.Code} | Error message: {result.Error?.Message}");
        }

        return result.Data.Balances.FirstOrDefault(x => x.Asset.Equals(asset, StringComparison.OrdinalIgnoreCase))
            .ToBalance();
    }
}
 

Ответ №1:

Эта конкретная проверка исходит не от самого РеШарпера, а от расширения «Исключительный для РеШарпера». Однако, как я вижу, вы уже представили новый выпуск в репозитории GitHub.

Комментарии:

1. Друг сделал это, но да.