2016-04-12 4 views
0

私はMicrosoft Azureのライブラリを使用しています。 Microsoft Azureのコードを引数として渡すことができるコンテナの一覧を動的に返そうとしています。どちらのメソッドも同じクラス内にあります。リスト<string>を方法1から方法2に渡すことができません

ListContainer()

static public List<string> ListContainer(StartConfig config) 
{ 
    List<string> container = new List<string>(); 

    if (config == null || config.BlobClient == null) 
    { 
     config = Program.GetConfig(); 
    } 

     //Get the list of the blob from the above container 
    IEnumerable<CloudBlobContainer> containers = config.BlobClient.ListContainers(); 

    foreach (CloudBlobContainer item in containers) 
    { 
     container.Add(item.Name); 
    } 

    //Adding a print statement 
    Console.WriteLine(String.Join("\n", container)); 
    Console.WriteLine("\n"); 

    return container; 
} 

GETCONFIG()

public static StartConfig GetConfig() 
{ 
    StartConfig config = new StartConfig(); 

    // Retrieve storage account from connection string. 
    config.StorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

    // Create the blob object. 
    config.BlobClient = config.StorageAccount.CreateCloudBlobClient(); 


    //Get a reference to a container to use for the sample code, and create it if it does not exist. 
    config.Container = config.BlobClient.GetContainerReference(//List of Container names which are returned from ListContainer()); 

    //Create the container if it does not exisit. 
    config.Container.CreateIfNotExists(); 

    return config; 
} 

私は疲れて単にvar test = ListContiner(null)の方法ListContainer()コールすると、私のGetConfig()以内にすることを置きます。私がそれをしたとき、私はStackOverflowExceptionを得るでしょう。 ListContainerconfigがヌルでないことを確認してから、GetConfig()を実行してconfigに割り当てているためです。誰もが簡単ににconfig.Container = config.BlobClient.GetContainerReference(CONTAINER_NAME);を配置する方法に関するアイデアがある場合は、コンテナのリストListContainers()から素晴らしいだろう!あなたはGetConfigメソッド内var test = ListContainer(null)を入れ

答えて

2

、あなたがGetConfigを呼び出すたび、それはconfig == nullかどうかを確認し、StackOverflowExceptionをthrowning、再びGetConfigを呼び出すListContainer(null)を呼び出します。

何とかサイクルを破る必要があります。 GetConfigListContainerの中に呼び出すのではなく、configを渡す必要があります。発信者がそれを保護しないようにするには、保護者を置く必要があります。

public static List<string> ListContainer(StartConfig config) 
{ 
    if (config == null) 
     throw new ArgumentNullException("config"); 
    if (config.BlobClient == null) 
     throw new ArgumentException("BlobClient must not be null", "config"); 

    List<string> container = new List<string>(); 

    //Get the list of the blob from the above container 
    IEnumerable<CloudBlobContainer> containers = config.BlobClient.ListContainers(); 

    foreach (CloudBlobContainer item in containers) 
    { 
     container.Add(item.Name); 
    } 

    //Adding a print statement 
    Console.WriteLine(String.Join("\n", container)); 
    Console.WriteLine("\n"); 

    return container; 
} 

あなたはまたconfigを渡すListContainerを呼び出すためのGetConfig方法を変更します

public static StartConfig GetConfig() 
{ 
    StartConfig config = new StartConfig(); 

    // Retrieve storage account from connection string. 
    config.StorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

    // Create the blob object. 
    config.BlobClient = config.StorageAccount.CreateCloudBlobClient(); 

    var containers = ListContainer(config); 

    //Get a reference to a container to use for the sample code, and create it if it does not exist. 
    config.Container = config.BlobClient.GetContainerReference(//List of Container names which are returned from ListContainer()); 

    //Create the container if it does not exisit. 
    config.Container.CreateIfNotExists(); 

    return config; 
} 
+0

は、私は「あなたが設定を必要とすることについては行くだろうかのコードサンプルのビットを提供することができますあなた自身を守るためにそれに渡され、警備員が? – jdave

+0

私はすでにしました。メソッドの先頭にある2つのifはnullの設定とconfig.BlobClientに対してメソッドを保護します。 –

関連する問題