2017-05-06 1 views
-1
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; 
     } 

Ceci est ma méthode .. Formulaire cette méthode, je dois retourner xelement. Dans cette méthode j'ai déclaré xelement dans la boucle for. Après la fin de la boucle, je dois retourner ce xelement nommé comme auteur. comment retourner ce xelement?Comment retourner une variable qui est déclarée avec dans la boucle C#

+0

Vous devez déclarer 'Author' en dehors de la boucle. mettre 'XElement Author = new XElement (" author ");' avant la boucle for. –

+0

mais je ne vais pas créer à chaque fois – Malathi

+0

Donc si votre boucle a 10 itérations, il créera 10 objets Auteur, lequel vous voulez retourner? –

Répondre

1

Si vous déclarez la variable dans la boucle, vous ne pouvez l'utiliser que dans la boucle. Donc dans votre cas, vous devriez le déclarer en dehors de la boucle parce que vous ne pouvez pas mettre l'instruction return à l'intérieur de la boucle.

Edit:

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; 
     } 

Si vous voulez créer un XElement à chaque tour, vous pouvez les mettre tous dans un ArrayList revenir ensuite.

+0

si je mets en dehors de la boucle signifie qu'il ne créera pas chaque fois que la boucle est exécutée .. mais j'ai besoin de créer à chaque fois .. – Malathi

+0

Donc vous voulez créer un nouvel auteur à chaque itération et les retourner tous? –

+0

@Malathi vérifier ma réponse mise à jour. – solohane

0

Je crois qu'au lieu de retourner XElement de la fonction, vous devriez retourner List of XElement.

Vous pouvez écrire quelque chose comme ceci:

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; 
} 

Il sera préférable de retourner la liste ci-dessus de la manière, car ici, vous obtiendrez une nouvelle XElement pour chaque itération de la boucle.