【问题标题】:How to return variable which in declared with in loop c#如何返回在循环c#中声明的变量
【发布时间】:2017-05-06 04:04:42
【问题描述】:
  private XElement AuthorSeparate(List<string> authorName)
    {
        string surName = string.Empty;
        string initalName = string.Empty;
        string givenName = string.Empty;
        int j = 1;

        for (int i = 0; i < authorName.Count; i++)
        {
            XElement Author = new XElement("author");
            Author.Add(new XAttribute("Seq", j));
            else
            {
                char[] initalArray = splitedName[0].ToCharArray();
                initalName = initalArray[0] + '.'.ToString();
                surName = splitedName.LastOrDefault();
                splitedName = splitedName.Reverse().Skip(1).Reverse().ToArray();
                givenName = string.Join(" ", splitedName);
            }

            if (!string.IsNullOrEmpty(initalName))
            {
                XElement InitalElement = new XElement("initials", initalName);
                Author.Add(InitalElement);
            }

            if (!string.IsNullOrEmpty(surName))
            {
                XElement SurnameElement = new XElement("surname", surName);
                Author.Add(SurnameElement);
            }

            if (!string.IsNullOrEmpty(givenName))
            {
                XElement GivenNameElement = new XElement("given-name", givenName);
                Author.Add(GivenNameElement);
            }
        }
 return Author;
       }

这是我的方法.. 形成这个方法我需要返回 xelement。在这个方法中,我在 for 循环中声明了 xelement。在 for 循环完成后,我需要返回名为 author 的 xelement。如何返回那个xelement?

【问题讨论】:

  • 您需要在循环外声明Author。将 XElement Author = new XElement("author"); 放在 for 循环之前。
  • 但我不会每次都创建
  • 因此,如果您的循环有 10 次迭代,它将创建 10 个 Author 对象,您要返回哪一个?
  • 你打算做什么?根据您的描述,您希望每次通过循环创建一个新作者,但是您只想在函数结束时返回其中一个作者?这似乎是你所要求的,但我怀疑那是你真正想要的。你想做什么?
  • 是否因为某种原因出现错误?你知道这是 C#,对吧?大多数对象/实例实际上都是引用。因此,您应该能够返回在循环中声明的变量。在循环内的任何时候,您只需“返回”它即可。运行时执行引用计数和垃圾收集。

标签: c# xelement


【解决方案1】:

如果在循环中声明变量,则只能在循环内使用它。因此,在您的情况下,您应该在循环之外声明它,因为您不能将 return 语句放在 for 循环中。

编辑:

private ArrayList AuthorSeparate(List<string> authorName)
    {
        string surName = string.Empty;
        string initalName = string.Empty;
        string givenName = string.Empty;
        int j = 1;
        ArrayList authors = new ArrayList();
        for (int i = 0; i < authorName.Count; i++)
        {
            XElement Author = new XElement("author");
            Author.Add(new XAttribute("Seq", j));
            else
            {
                char[] initalArray = splitedName[0].ToCharArray();
                initalName = initalArray[0] + '.'.ToString();
                surName = splitedName.LastOrDefault();
                splitedName = splitedName.Reverse().Skip(1).Reverse().ToArray();
                givenName = string.Join(" ", splitedName);
            }

            if (!string.IsNullOrEmpty(initalName))
            {
                XElement InitalElement = new XElement("initials", initalName);
                Author.Add(InitalElement);
            }

            if (!string.IsNullOrEmpty(surName))
            {
                XElement SurnameElement = new XElement("surname", surName);
                Author.Add(SurnameElement);
            }

            if (!string.IsNullOrEmpty(givenName))
            {
                XElement GivenNameElement = new XElement("given-name", givenName);
                Author.Add(GivenNameElement);
            }
          authors.Add(Author)
        }
    return authors;
       }

如果你想在每一轮中创建一个 XElement,你可以把它们都放在一个 ArrayList 中然后返回它。

【讨论】:

  • 如果我放在循环之外意味着每次执行循环时它都不会创建..但我需要每次都创建..
  • 所以你想在每次迭代中创建一个新作者并返回所有这些?
【解决方案2】:

我相信您应该返回 XElement 列表,而不是从函数返回 XElement。

所以你可以这样写:

  private List<XElement> AuthorSeparate(List<string> authorName)
{
    string surName = string.Empty;
    string initalName = string.Empty;
    string givenName = string.Empty;
    int j = 1;
    var AuthorList = new List<XElement>();

    for (int i = 0; i < authorName.Count; i++)
    {
        XElement Author = new XElement("author");
        Author.Add(new XAttribute("Seq", j));
        else
        {
            char[] initalArray = splitedName[0].ToCharArray();
            initalName = initalArray[0] + '.'.ToString();
            surName = splitedName.LastOrDefault();
            splitedName = splitedName.Reverse().Skip(1).Reverse().ToArray();
            givenName = string.Join(" ", splitedName);
        }

        if (!string.IsNullOrEmpty(initalName))
        {
            XElement InitalElement = new XElement("initials", initalName);
            Author.Add(InitalElement);
        }

        if (!string.IsNullOrEmpty(surName))
        {
            XElement SurnameElement = new XElement("surname", surName);
            Author.Add(SurnameElement);
        }

        if (!string.IsNullOrEmpty(givenName))
        {
            XElement GivenNameElement = new XElement("given-name", givenName);
            Author.Add(GivenNameElement);
        }
        AuthorList.Add(Author);
    }
        return AuthorList;
}

以上述方式返回列表会更好,因为在这里您将为循环的每次迭代获得一个新的 XElement。

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多