我是C#的新手,这是我第一次使用此API
我想从API获取Mega帐户信息。
我可以( TotalQuota , UsedQuota , AvailableQuota =“TotalQuota - UsedQuota”)代码打击(我可以将其转换为GB)。
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;
}
图片the error i got when i run "myAccountInformation.Metrics"
这是我寻找Pic
的数据我得到了这个例外Trying the last foeach or the other way get this ex
“指标”包含一些重要数据,我希望得到它,我无法实现代码以字符串形式接收它。
我想获得( FoldersCount , FilesCount , BytesUsed , NodeId )
我已经尝试过每次搜索样本而没有找到。
我从“ Github ”获得此信息,但我仍然不明白如何使用它以及 接口 是什么。我不需要在C#中学到一些关于发生了什么的小知识,所以我可以继续。
如果有人帮助我,我将感激不尽。
答案 0 :(得分:0)
根据您提供给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
的{{1}},则必须实施这些功能以匹配Interface
。您已经看到我为您Interface
添加了Interface
并准确实施了它。 (我确实在属性中添加了setter,因为你这样使用它们。)
从中获取的一些有趣的事情是多态性的使用。您现在可以通过直接类型或通过struct
接口作为类型访问您的对象。这对于只知道你自己要编写的IAccountInformation
而不是Interface
(或````````)的方法很有用。
另一件有趣的事情是,Type
IAccountInformation
中是如何使用多态的。 Interface
property
表示从IEnumerable<IStoreMetrics> Metrics { get; }
派生的任何Type
也会包含从IAccountInformation
派生的类型的枚举。
当我们查看IStorageMetrics
时(通过您提供的链接),您将看到4个属性(NodeId,BytesUsed,FilesCount,FoldersCount)。
代码中的IStorageMetrics
就像娱乐接收器,电视或计算机背面的端口。你有HDMI,RCA,光纤,USB等......如果你的接收器有RCA输出和光纤输出,你知道你可以插入RCA电缆或光纤电缆插入它,因为它接收器的接口。 RCA插孔是为了做一些特别的事情但接收器不知道你要插入它的是什么。它只知道必须匹配该接口。代码是一样的...我们不知道谁在使用Interface
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
作为所有查询的核心。
你可以像之前那样使用linq,就像这样...
IEnumerable
因此,您可以使用以下内容编写文本:(如果您想要的值当然是BytesUsed的总和。)
// The following will result in totalBytes being the sum of all Metrics
var totalBytes = myAccountInformation.Metrics.Sum(storageMetric => storageMetric.BytesUsed);
这有意义吗?