Как вернуть Mega Account Информационную форму Mega API - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в C #, и я впервые использую этот API

Я хочу получить информацию мега-аккаунта из API.

Я могу получить ( TotalQuota , UsedQuota , AvailableQuota = " TotalQuota - UsedQuota ") с кодом удара (и я могу преобразовать его в ГБ).

MegaApiClient myMegaClient = new MegaApiClient();

public void megaAccLogIn(string megaAccUserName,string megaAccPassword)
{
    if (myMegaClient.IsLoggedIn == true)
    {
        return;
    }
    else
    {
        myMegaClient.Login(megaAccUserName, megaAccPassword);
    }
}

public struct AccountInfo : IAccountInformation
{
    public long TotalQuota { get; set; }
    public long UsedQuota { get; set; }
    public IEnumerable<IStorageMetrics> Metrics { get; set; }

    public long AvailableQuota;
}

public AccountInfo getfoldercount()
{
    AccountInfo myAccountInformation = new AccountInfo();

    megaAccLogIn(megaAccUserName, megaAccPassword);

    var myMegaClintGetAccInfo = myMegaClient.GetAccountInformation();

    //IEnumerable<IStorageMetrics> test = myMegaClintGetAccInfo.Metrics;




    myAccountInformation.TotalQuota = myMegaClintGetAccInfo.TotalQuota;
    myAccountInformation.UsedQuota = myMegaClintGetAccInfo.UsedQuota;
    myAccountInformation.AvailableQuota = myMegaClintGetAccInfo.TotalQuota - myMegaClintGetAccInfo.UsedQuota;
    myAccountInformation.Metrics = myMegaClintGetAccInfo.Metrics;

    return myAccountInformation;
}

это код для запуска метода

private void button5_Click(object sender, EventArgs e)
{
    var myAccountInformation = getfoldercount();

    textBox1.Text = FormatBytes(myAccountInformation.TotalQuota) + "\r\n" + FormatBytes(myAccountInformation.UsedQuota) + "\r\n" + myAccountInformation.Metrics;

}

картинка ошибка, которую я получил при запуске "myAccountInformation.Metrics"

это те данные, которые я ищу Рис.

Я получил это исключение Попытка последнего фоа или другой способ получить это бывшее

" Metrics " содержит некоторые важные данные, и я хочу их получить, и я не могу реализовать код для получения его в виде строки.

Я хочу получить ( FoldersCount , FilesCount , BytesUsed , NodeId )

Я пробовал каждый поиск образцов и не нашел ни одного.

У меня это от " Github ", но я все еще не понимаю, как его использовать и что такое Интерфейс . Мне не нужен урок в C #, только небольшое понимание того, что происходит, чтобы я мог продолжить.

С этой страницы

Если кто-нибудь мне поможет, я буду благодарен.

1 Ответ

0 голосов
/ 17 мая 2018

На основании предоставленной вами ссылки на MegaApiClient вы неправильно настраиваете AccountInfo. Я могу ошибаться; этот ответ основан только на том, что вы предоставили, и на ссылке на источник MegaApiClient, который, как я предполагаю, должен совпадать.

Я бы сначала написал свой AccountInfo, чтобы он соответствовал интерфейсу IAccountInformation следующим образом:

public struct AccountInfo : IAccountInformation
{
    public long TotalQuota { get; set; }
    public long UsedQuota { get; set; }
    public IEnumerable<IStorageMetrics> Metrics { get; set; }
}

Я полагаю, что только изменение этого исправит вашу ошибку. В вашем коде вы указываете, что Metrics - это long, тогда как на самом деле это должно быть IEnumerable<IStorageMetrics>. Если вам нужны дальнейшие объяснения, дайте мне знать, и я с удовольствием выложу / объясню подробнее.

Поскольку вы спрашивали о прозрении о Interface, я постараюсь объяснить это кратко и кратко.

Interface - это в основном синяя печать того, как должен выглядеть object. Это объясняет особенности object. Например: в интерфейсе IAccountInformation (по предоставленной вами ссылке) указывается, что объект будет иметь как минимум свойство только для чтения long TotalQouta. В нем также говорится, что есть два других свойства long UserQouta и IEnumerable<IStorageMetrics> Metrics.

Так что если вы делаете object, который использует Interface, вы должны реализовать эти функции, чтобы соответствовать Interface. Вы увидите, что я добавил Interface к struct для вас и реализовал его точно. (Я также добавил сеттеры в свойства, так как вы используете их таким образом.)

Что-то интересное, что можно отнять, это использование полиморфизма. Теперь вы можете получить доступ к вашему объекту через прямой тип или через интерфейс IAccountInformation как тип. Это полезно для методов, которые знают только о Interface, а не Type (или `` `объект````), который вы собираетесь написать самостоятельно.

Еще одна интересная вещь, которую стоит убрать, это то, как полиморфизм используется в IAccountInformation Interface уже. property IEnumerable<IStoreMetrics> Metrics { get; } утверждает, что любой Type, производный от IAccountInformation, также будет иметь перечисление типов, производных от IStorageMetrics.

Когда мы посмотрим на IStorageMetrics (по указанной вами ссылке), вы увидите 4 свойства (NodeId, BytesUsed, FilesCount, FoldersCount).

Код Interface подобен портам на задней панели ресивера, телевизора или компьютера. У вас есть HDMI, RCA, Optic, USB и т. Д. ... Если у вас есть ресивер с RCA-выходом и Optic, то вы знаете, что можете подключить к нему кабели RCA или оптоволоконный, потому что это интерфейс для получатель. Разъемы RCA предназначены для выполнения каких-то определенных задач, но приемник не знает, что вы собираетесь к нему подключить. Он просто знает, что должен соответствовать этому интерфейсу. Код работает точно так же ... Мы не знаем, кто использует IAccountInformation Interface, но мы знаем, что у него будет настройка, о которой говорит IAccountInformation, и мы можем общаться с ним через них.

Хорошо, вы обновили вопрос, и это нормально. Я оставлю то, что я написал, и выложу больше здесь.

Не забывайте, что Metrics - это IEnumerable<IStorageMetrics>, что означает, что это перечисление IStorageMetrics типов. (Если это помогает визуализировать это, думайте о Metrics как о массиве или списке IStorageMetrics. IEnumerable просто означает, что тип может быть перечислен.

Перечисления используются по-разному, но один из самых распространенных - это цикл, такой как цикл foreach. Например, вы можете получить информацию из Metrics следующим образом.

foreach (var storageMetric in myAccountInformation.Metrics)
{
    var bytesUsed = storageMetric.BytesUsed;
    var filesCount = storageMetric.FilesCount;
    var foldersCount = storageMetric.FoldersCount;
    var nodeId = storageMetric.NodeId;
    // do what you want with the info here
}

Другое популярное использование IEnumerable - это использование System.Linq, которое использует IEnumerable в основе всех запросов. Вы можете использовать linq, как раньше, например ...

 // The following will result in totalBytes being the sum of all Metrics
 var totalBytes = myAccountInformation.Metrics.Sum(storageMetric => storageMetric.BytesUsed);

Таким образом, вы могли бы написать текст с чем-то вроде этого: (если вы хотите, чтобы значения были суммой BytesUsed, конечно.)

var totalBytesUsed = myAccountInformation.Metrics.Sum(storageMetric => storageMetric.BytesUsed);
textBox1.Text = FormatBytes(myAccountInformation.TotalQuota) + "\r\n" + FormatBytes(myAccountInformation.UsedQuota) + "\r\n" + totalBytesUsed;

Имеет ли это какой-то смысл?

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