2010-04-08 3 views
2

Je reçois cette erreur lors de l'exécution: référence d'objet non définie à une instance d'objetréférence d'objet non définie à une instance d'exception objet à venir lors de l'exécution

ma question est que j'utilise ensemble stringbuilder correctement ici. Parce que je suis nouveau en C#. et je pense que c'est le problème avec mon tableau stringbuilder. Ci-dessous le code:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Text; 
using System.Web.Script.Serialization; 
using System.Web.Script.Services; 
using System.Collections; 


public partial class Testing : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 


    [WebMethod] 
    public static string SendMessage() 
    { 
     try 
     { 
      al2c00.ldap ws = new al2c00.ldap(); 
      Hashtable htPeople = new Hashtable(); 

      //DataTable dt = ws.GetEmployeeDetailsBy_NTID("650FA25C-9561-430B-B757-835D043EA5E5", "john"); 

      StringBuilder[] empDetails = new StringBuilder[100]; 


      string num = "ambreen"; 
      empDetails[0].Append("amby"); 
      num = empDetails[0].ToString(); 

      htPeople.Add("bellempposreport", num); 


      JavaScriptSerializer jss = new JavaScriptSerializer(); 

      string output = jss.Serialize(htPeople); 
      return output; 
     } 
     catch(Exception ex) 
     { 
      return ex.Message + "-" + ex.StackTrace; 
     } 
    } 
} 

répondez-moi ce que je fais mal ici.

Répondre

3

empDetails est actuellement un tableau de StringBuilder s et empDetails[0] (la première StringBuilder dans le tableau) n'est pas instancié, d'où l'erreur que vous obtenez. Qu'est-ce que vous devriez faire est de faire un tableau de StringBuilder s (sauf si c'est ce que vous avez l'intention ...), vous devriez simplement faire un StringBuilder.

StringBuilder empDetails = new StringBuilder(); 

Ensuite append vous pouvez simplement faire:

empDetails.Append("stringhere"); 
2

Cette ligne crée un tableau de 100 références null:

StringBuilder[] empDetails = new StringBuilder[100]; 

Si vous souhaitez utiliser empDetails[0], vous devez attribuer quelque chose d'abord:

empDetails[0] = new StringBuilder(); 

Ce n'est pas clair pour moi pourquoi vous créez un tableau de 100 StringBuilders cependant. Tu ne pourrais pas faire ça?

htPeople.Add("bellempposreport", "ambreen"); 
+0

Je pense qu'il était juste confus sur la syntaxe pour initialiser la taille de StringBuilder. – BenV

+0

@Ben V: Il a explicitement mentionné qu'il veut un tableau dans sa question. En regardant attentivement son code, je ne vois même pas l'utilité de StringBuilder. Il y ajoute juste une corde, puis la récupère à nouveau. –

+0

Bon point, j'ai raté ça. Je devine que ce code est juste un échantillon et que finalement il y aura une boucle où il ajoute au stringbuilder et à la hashtable. – BenV

2

Ne vous embêtez pas attribuer cette valeur:

string num = "ambreen"; 

comme il va être perdu quand vous le réattribuer.

Ce:

StringBuilder[] empDetails = new StringBuilder[100]; 
//no need for creating an array of string builders. 

devrait être ceci:

StringBuilder empDetails = new StringBuilder(); 

ET

empDetails.Append("amby"); 

string num = empDetails.ToString(); 

http://msdn.microsoft.com/en-us/library/2839d5h5(VS.71).aspx

1

Je pense qu'il pourrait vouloir être pré-taille à 100

StringBuilder empDetails = new StringBuilder(100); 
empDetails.Append("stringhere"); 
0

Utilisez uniquement stringbuilder si vous regroupez un document grand du texte. Si vous êtes joindrez quelques (< 10) éléments simplement en utilisant string.Format ou tout simplement les + ensemble, comme

string myEmployee = string.Format("First:{0} Last: {1} Middle: {2}", "Stack", "Overflow", "C#"); 
0

Merci à tous.Mon problème résolu en utilisant le code ci-dessous:

 //Creating stringbuilder array for storing key values 
     StringBuilder[] empDetails = new StringBuilder[70]; 

     for (int i = 0; i < empDetails.Length; i++) 
     { 
      empDetails[i] = new StringBuilder(); 
     } 
Questions connexes