Операция Arithmeti c привела к переполнению int - PullRequest
1 голос
/ 14 июля 2020

Для получения данных пользователей облачного хранилища / электронная почта / (ключ: значения) с помощью C#

Я пытался передать, используя текстовое поле электронной почты, то есть TboxEmail.

DocumentReference docref = Data.Collection("users").Document(TboxEmail.Text);
DocumentSnapshot snap = await docref.GetSnapshotAsync();

I создал класс Userinfo, который получает все данные и выбирает только нужный ключ: значение.

using Google.Cloud.Firestore;

namespace FormApp
{
    [FirestoreData]
    class Userinfo
    {
        [FirestoreProperty]
        public string email { get; set; }
        [FirestoreProperty]
        public bool status { get; set; }
        [FirestoreProperty]
        public string name { get; set; }
        [FirestoreProperty]
        public string address { get; set; }
        [FirestoreProperty]
        public int phone { get; set; }
    }
}

Код.

 bool s;
 try
 {
     DocumentReference docref = Data.Collection("users").Document(TboxEmail.Text);
     DocumentSnapshot snap = await docref.GetSnapshotAsync();

     if (snap.Exists)
                {
                    Userinfo userinfo = snap.ConvertTo<Userinfo>();
                    
                    s = userinfo.status;
                    if (s)
                    {
                            this.Hide();
                            Dashboard home = new Dashboard(TboxEmail.Text);
                            home.ShowDialog();
                            return;
                    }
                }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
                MessageBox.Show(ex.StackTrace);
            }

Если я использую обычный текст, например test в (Firestore) / users (Collection) / text (Document) и введите test in TboxEmail , затем код запускается fine .

Проблема в том, что я использую электронную почту вроде test@gmail.com в (Firestore) / users (Collection) / email (Document) и помещаю test@gmail.com в TboxEmail , то приведенный выше код не может преобразовать данные в userinfo .

Исключение из ex.Message is

Arithmetic operation resulted in an overflow

Exception from ex.StackTrace is

например, StackTrace

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Преобразование int в Int64 для телефона решает проблему!

using Google.Cloud.Firestore;
    
    namespace FormApp
{
    [FirestoreData]
    class Userinfo
    {
        [FirestoreProperty]
        public string email { get; set; }
        .....
        [FirestoreProperty]
        public Int64 phone { get; set; }
    }
}
0 голосов
/ 14 июля 2020

Трудно угадать точные детали, но исключение намекает на проблему с целыми числами. Большинство телефонных номеров превышают размер типа данных int, поэтому я бы поискал там. Решением было бы хранить телефонные номера в виде строки, чтобы вы также могли представлять коды стран (например, +1) и не беспокоиться о целочисленной точности.

...