2016-05-05 5 views
0

gpaillerのMegaApiClientを使用していますが、mega.nzでいくつかのファイルにアクセスしようとしています。単純な例:。c#MegaApiClient動的変数

INode myFolder = client.GetNodes(root).Single(n => n.Name == "apps"); 
INode myFolder1 = client.GetNodes(myFolder).Single(n => n.Name == "someapp"); 
INode myFolder2 = client.GetNodes(myFolder1).Single(n => n.Name == "somefolder"); 
INode myFile = client.GetNodes(myFolder2).Single(n => n.Name == "somefile.file"); 

これは動作します(MegaApiClientがこのように動作します)

MegaApiClient client = new MegaApiClient(); 
client.Login(email,pass); 
var nodes = client.GetNodes(); 
string Path = root\apps\someapp\somefolder\somefile.file; /*Path from user. This can be much longer*/ 
String[] directories = Path.Split(System.IO.Path.DirectorySeparatorChar); 
foreach (string folder in directories) 
{ 
    if (folder == "root") 
    { 
     //1. Error:A local or parameter named 'test' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter 
     INode test= nodes.Single(n => n.Type == NodeType.Root); 
    } 

    //2. Error:Use of unassigned local variable test 
    INode test = client.GetNodes(test).Single(n => n.Name == folder);     
} 
Client.DownloadFile(myFile, copy); 
client.Logout();` 
Errors: 

私はそれを試してみたが、それは動作しません。私は覚えていない以外にも多くの方法を試みました。私は動的変数を使用する必要があると思います。どうしたのか分かりません。私を助けてください。私の悪い英語には申し訳ありません。

アップデート1 必要foreachおよびその他一つだけのコードとその作業はありません。 GetNodes()メソッドはすべてのノードを返します。解決策は次のとおりです。

//Its simple like this yes. Thanks gpailler for the answer 
var file = client.GetNodes().Single(n => n.Type == NodeType.File && n.Name == FileName); 
+0

あなたは「これはうまくいきます」と言いますが、そうではないと言います。どこが壊れて、何がエラーですか? –

+0

これは単なるテストです。私はAPIがこのように動作することを意味します。エラーはforeachにあります。 –

+0

どこが壊れていますか?エラーは何ですか? –

答えて

0

testを2回定義しています。内側スコープと外側スコープのそれぞれに1度。

2番目のエラーでは、という変数を.GetNodes(test)メソッドで使用しようとしています。この時点でtestは初期化されていません。

これらを修正するには、testを外側のスコープとして宣言する必要があります。

INode test; 

foreach (string folder in directories) 
{ 
    if (folder == "root") 
    { 
     test = nodes.Single(n => n.Type == NodeType.Root); 
    } 
    else 
    { 
     test = client.GetNodes().Single(n => n.Name == folder);   
    } 
} 
+0

私は別の方法を見ません。変数testの値はすべてのループで変更する必要があります。どうすれば修正できますか? –

+0

私はあなたのアップデートに基づいて情報を追加しました。 –

+0

私はあなたのソリューションを試しましたが、「抽象クラスまたはインタフェース 'INode」のインスタンスを作成できません。 –