首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将List<string>从方法1传递到方法2

无法将List<string>从方法1传递到方法2
EN

Stack Overflow用户
提问于 2016-04-12 18:36:36
回答 1查看 98关注 0票数 0

我正在微软Azure的图书馆工作。我试图动态地返回一个容器列表,在那里我可以作为参数传递到Microsoft的代码中。这两种方法都在同一个类中。

ListContainer()

代码语言:javascript
复制
 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()

代码语言:javascript
复制
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;
}

我只想简单地将方法ListContainer()称为var test = ListContiner(null),并将其放在GetConfig()中。当我这样做的时候,我会得到一个StackOverflowException。这是因为ListContainer正在检查以确保config不是null,然后运行GetConfig()并将其分配给配置。如果有人对如何简单地在GetConfig()中填充来自ListContainers()的容器列表有任何想法,那就太棒了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 18:58:35

当您将var test = ListContainer(null)放入GetConfig方法中时,每当您调用GetConfig时,它都会调用ListContainer(null),这将检查config == null是否并再次调用GetConfig,从而抛出StackOverflowException

你必须设法打破这个循环。我的建议是,不要在ListContainer中调用ListContainer,而是需要将一个config传递给它,并在调用者不调用的情况下设置一个保护机制来保护自己。

代码语言:javascript
复制
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;
}

您还将更改GetConfig方法以调用传递configListContainer

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36581408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档