Операнд Resharper всегда имеет нулевой предел - PullRequest
0 голосов
/ 03 марта 2020

У меня странная проблема с ReSharper, и я не уверен, что он делает и почему ... У меня есть метод такого типа (сокращенно, чтобы показать соответствующие части):

    internal static bool Initialize([CanBeNull] [ItemNotNull] List<object> injectedServices = null)
    {       
        ...Other Stuff...

        // Services with no dependencies
        _kmAuthService = injectedServices?.OfType<IAuthService>().FirstOrDefault() ??
                      AuthService.GetAuthService();
        NotifyService = injectedServices?.OfType<INotifyService>().FirstOrDefault() ??
            CommonServiceProvider.GetNotifyService();
        LinkCompileService = injectedServices?.OfType<ILinkCompileService>().FirstOrDefault() ??
            new LinkCompileService();
        _validatorService = injectedServices?.OfType<IKeynoteValidator>().FirstOrDefault() ?? new KeynoteValidator();
        ApiService = injectedServices?.OfType<IApiService>().FirstOrDefault() ?? new ApiService();

        // Dependent only on non-dependent services
        _printService = injectedServices?.OfType<IPrintService>().FirstOrDefault() ??
            new PrintService(NotifyService, Settings);
        TipService = injectedServices?.OfType<ITipService>().FirstOrDefault() ??
            CommonServiceProvider.GetTipService(RDES.License.Core.Enums.SoftwareTitles.KeynoteManager,
                                                NotifyService, RevitVersion);
        _reportService = injectedServices?.OfType<IUsageReportService>().FirstOrDefault() ??
            new UsageReportService(_kmAuthService);
        _versionService = injectedServices?.OfType<IVersionService>().FirstOrDefault() ??
            new VersionService(_kmAuthService);
        WatcherService = injectedServices?.OfType<IWatcherService>().FirstOrDefault() ??
            new WatcherService(NotifyService);

        // Multi-Level dependent Services, check for circular dependency
        DbService = injectedServices?.OfType<IDbService>().FirstOrDefault() ??
                    new DbService(NotifyService, _validatorService, ApiService, _printService);
        BackupService = injectedServices?.OfType<IBackupService>().FirstOrDefault() ??
            new BackupService(DbService, Settings.BackupPath, NotifyService, ApiService, Settings.NumberOfBackups);
        UpdateService = injectedServices?.OfType<IUpdateCheckService>().FirstOrDefault() ??
                        new UpdateCheckService(RDES.License.Core.Enums.SoftwareTitles.KeynoteManager,
                                               _versionService);
        DBManager = injectedServices?.OfType<IDBManager>().FirstOrDefault() ?? new DBManager(NotifyService);

        ...Other Stuff...
    }

Это компилирует и работает нормально, однако на 9-м сервисе (_versionService) ReSharper предупреждает меня, что '??' left operand is always null, и хочет, чтобы я от него избавился. Насколько я могу судить, это точно так же, как и все другие сервисы, и ReSharper не дает никаких предупреждений о них. Чтобы сделать его еще более странным, если я закомментирую или удалю какую-либо из служб выше этой, предупреждение переходит к следующей (WatcherService), что подтверждает, что в этом нет ничего другого. Я также попытался перевернуть его с вышеупомянутым (_reportService) и той же сделкой, затем он выдает предупреждение на _reportService вместо _versionService. Кажется, что он просто застрял, давая предупреждение о том, что 9-е использование этой переменной ...

Я также попытался переключить переменную между List<object>, IEnumerable<object> и object[] на случай, если что-то странное с одним типом коллекции или чем-то другим, но и без изменений.

Я знаю, что могу сказать, чтобы оно игнорировало предупреждение, но хотелось бы знать, почему это происходит, и если я что-то здесь упускаю или что делать об этом. Любая помощь или понимание приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...