Как я могу получить исключение «Количество не может быть меньше нуля» в коде, где нет счетчика? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть этот код:

    public void ABtn()
    {
        if (ABtnState == "E")
        {
            phrase.Points += -(int)Settings.ABtn;
            ABtnState = "D";
        }
        else
        {
            phrase.Points += (int)Settings.ABtn;
            ABtnState = "E";
        }
        if (BBtnState == "E")
        {
            phrase.Points += -(int)Settings.BBtn;
            BBtnState = "D";
        }
        if (CBtnState == "E") { phrase.Points += -(int)Settings.CBtn; CBtnState = "D"; }
        if (DBtnState == "E") { phrase.Points += -(int)Settings.DBtn; DBtnState = "D"; }
        if (EBtnState == "E") { phrase.Points += -(int)Settings.EBtn; EBtnState = "D"; }
        App.DB.SetPoints(phrase.PhraseId, phrase.Points);
        App.viewablePhrases = App.DB.GetViewablePhrases(Settings.Mode, Settings.Pts, true);
        Cif2aInfo = new String('☆', phrase.Points);
    }

И appcenter сообщает следующее cra sh во время ABtn:

DeckTabViewModel.ABtn () System.ArgumentOutOfRangeException: Count не может быть меньше нуля. Имя параметра: count

С этой трассировкой стека

Стек исключений Xamarin: System.ArgumentOutOfRangeException: Количество не может быть меньше нуля. Имя параметра: количество в System.String.Ctor (System.Char c, System.Int32 count) [0x0000d] в <3ad100fe60d44e1c8a81197ba1997e7e>: 0 в System.String.CreateString (System.Char c, System.Int32 count ) [0x00000] в <3ad100fe60d44e1c8a81197ba1997e7e>: 0 в (обертке удалась к управляемым) System.String..ctor (символ, целый) в Japanese.DeckTabViewModel.ABtn () [0x00178] в <75f30b75b8d1435e80e8b7703a671ca c>: 0 при Xamarin.Forms.Command + <> c__DisplayClass4_0 <т е р.> b__0 (System.Object о) [0x00000] в <46a6a42f4aa4494a9a4f56ec3eee8423>:. 0 при Xamarin.Forms.Command.Execute (System.Object параметр) [0x00000] в <46a6a42f4aa4494a9a4f56ec3eee8423 >: 0 в Xamarin.Forms.ButtonElement.ElementClicked (Xamarin.Forms.VisualElement visualElement, Xamarin.Forms.Internals.IButtonElement ButtonElementManager) [0x0001a] в <46a6a42f4aa4494a9a0e0e.jpg: 386.eff: в <46a6a42f4aa4494a9a4f56ec3eee8423>: 0 в Xamarin.Forms.Platform. Android .ButtonElementManager.OnClick (Xa элемент marin.Forms.VisualElement, Xamarin.Forms.IButtonController buttonController, Android .Views.View v) [0x00003] в: 0 в Xamarin.Forms.Platform. Android .FastRenderers.ButtonRenderer. Android .Views. View.IOnClickListener.OnClick (Android .Views.View v) [0x0000c] в: 0 при Android .Views.View + IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (System.IntPtr jnienv, System.IntPtr_ native_this). 0x00011] in: 0 at (wrapper dynamici c -method) Android .Runtime.DynamicMethodNameCounter.60 (intptr, intptr, intptr)

Есть ли у кого-нибудь идеи, что может быть причиной этого или как я мог исправить проблему?

1 Ответ

1 голос
/ 07 февраля 2020

Из Документы Microsoft :

String (Char c, Int32 count) Инициализирует новый экземпляр значением, указанным указанным символом Unicode, повторяющим указанное число раз

Так что, если ваша фраза. Указывает меньше 0, она выдаст вам эту ошибку, попробуйте это в C# Онлайн-компиляторе :

string Cif2aInfo = new String('☆', -1);
Console.WriteLine(Cif2aInfo);

Перед этим нужно проверить значение следующим образом:

Cif2aInfo = phrase.Points != null && phrase.Points > 0 ? new String('☆', phrase.Points) : string.Empty;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...