2009-10-20 7 views
0

J'utilise .NET 2.0. J'ai 2 objets l'un est: PhoneService et l'autre est ChartAccount. La relation entre cela est beaucoup à beaucoup.Beaucoup à plusieurs objets relationnels en C# Partie 2

public class PhoneService 
{  
    private List<ChartAccount> chartAccounts; 
    private ChartAccount chartAccount;  
    public Int64 ID  
    {  get { return id; }  
     set { id = value; }  
    }  
    public bool Add() { ... }  
    public bool Update() { ... } 
} 

public class ChartAccount 
{  
    public Int64 ID  
    {  get { return id; }  
     set { id = value; }  
    }  
    public bool Add() { ... }  
    public bool Update() { ... }  
    public bool Allocate()  
    {  
     // this will save data for the bridge table only  
    } 
} 

Dans mes clients, j'ai le code suivant:

PhoneService service = new PhoneService(Int64.Parse(dataItem.OwnerTableView.DataKeyValues[dataItem.ItemIndex]["ServiceID"].ToString())); 
if (service.ChartAccounts == null) 
{ 
    Allocation allocation = new ChartAccountAllocation(Int64.Parse(drpdwnlstMainChartAccountAllocation.SelectedValue)); 
    int i=0; 
    foreach(AllocationItem allocationItem in allocation.Items) 
    { 
     service.ChartAccounts[i].Name = allocationItem.Value2; 
     service.ChartAccounts[i].SplitPercentage = Decimal.Parse(allocationItem.Value1); 
     service.Allocate(); 
     i++; 
    } 
} 

j'ai eu une erreur sur la ligne suivante en disant que Utilisez le mot-clé « nouveau » pour créer une instance d'objet. service.ChartAccounts [i] .Name = allocationItem.Value2; Parce que CharAccounts est une collection d'objets ChartAccount et qu'il est à l'intérieur de l'objet Service, comment puis-je définir cette chose?

Merci

Répondre

1

Dans votre boucle foreach, vous faites service.ChartAccounts[i].Name = allocationItem.Value2, mais nous savons déjà service.ChartAccounts est nulle (sinon vous ne seriez pas passé la condition if initiale.

Avant boucle foreach, vous devez initialiser service.ChartAccounts, . en faisant serviceChartAccounts = new List<ChartAccount>() Ensuite, avant de configurer chaque valeur, vous devez créer une nouvelle ChartAccount avant de définir sa quelque chose comme la propriété Name

Je serais probablement réécris ceci:.

if (service.ChartAccounts == null) 
{ 
    Allocation allocation = new ChartAccountAllocation(Int64.Parse(drpdwnlstMainChartAccountAllocation.SelectedValue)); 

    List<ChartAccount> acctList = new List<ChartAccount>(); 
    foreach(AllocationItem allocationItem in allocation.Items) 
    { 
     ChartAccount acct = new ChartAccount(); 
     acct.Name = allocationItem.Value2; 
     acct.SplitPercentage = Decimal.Parse(allocationItem.Value1); 
     acctList.Add(acct); 
    } 
    service.ChartAccounts = acctList; 
    service.Allocate(); // I have no idea what this does, so this may be incorrect here 
} 

La chose importante à noter est que vous créez la liste et créez les objets ChartAccount avant de les utiliser.

1

instancier la liste dans l'objet Service

private List<ChartAccount> chartAccounts = new List<ChartAccount>;

+0

Lorsque vous insérez le code: Liste chartAccounts = new Liste ; J'ai l'erreur suivante: "Erreur Une nouvelle expression nécessite(), [] ou {} après le type" – dcpartners

+0

Shoudl be 'nouvelle liste ();' –

+0

J'utilise .NET 2.0 BTW. – dcpartners

0

Sur la deuxième ligne de votre échantillon de client vous vérifiez null:

if (service.ChartAccounts == null) 

mais dans le bloc suivant que nul vérifier que vous faites:

service.ChartAccounts[i].Name = allocationItem.Value2; 

Ceci est logiquement incompatible. Si service. ChartAccounts est null, vous ne pouvez pas utiliser et indexer pour interroger une valeur. Je pense que vous vouliez faire:

if (service.ChartAccounts != null) 

Je devine que votre code à l'intérieur du bloc si ne sera pas exécuté parce que votre objet service.ChartAccounts est en effet nulle. Vous devez retracer votre pile d'appels et vous assurer que vous avez instancié et rempli correctement la collection. Cela, et obtenez-vous une copie de ReSharper immédiatement.

Questions connexes