2009-02-16 5 views
0

Soirée all,C# - Stocker puis mettre à jour une propriété

J'ai écrit une application de transfert qui doit effectuer une mise à jour, puis mettre à jour une date correspondant à cette mise à jour. C'est à dire.

string content = string.Empty; 
IIvdManager manager; 
DateTime configDate; 

if (table == Tables.Asset) 
{ 
    content = WebService.GetTblAsset(companyId); 
    manager = ivdData.Instance.Asset; 
    configDate = ivdConfig.LAST_UPDATE_ASSET; 
} 
else if (table == Tables.Site) 
{ 
    content = WebService.GetTblSite(companyId); 
    manager = ivdData.Instance.Site; 
    configDate = ivdConfig.LAST_UPDATE_SITE; 
} 
else if (table...) 
{ 
    ... 
} 

if (content.Length > 0) 
{ 
    if (UpdateManager(manager, content)) 
    { 
     configDate = DateTime.Now; 
    } 

} 

Ce que je veux est pour la propriété ConfigDate mettre à jour la date correspondant Get/Set dans ma classe ivdConfig statique.

Comment est-ce que je peux faire ceci?

+0

Je suis un peu confus ici ... configDate n'est pas une propriété. C'est une variable locale, semble-t-il. –

+0

Oui, il est - Je sais que cela ne fonctionne pas, mais j'ai besoin d'un moyen de mettre à jour la Date dans l'autre classe statique ivdConfig – GenericTypeTea

+0

Je suis désolé, mais non, configDate n'est pas une propriété C# dans le code ci-dessus. Selon l'endroit où il vit, il s'agit d'un champ ou d'une variable locale, mais ce n'est pas une propriété (propriétés get et/ou set) –

Répondre

1

Avez-vous considéré le modèle d'état?

Sous-classe votre table (la variable de table) et ajoutez une méthode virtuelle (Update() peut-être?) Que vous remplacez ensuite dans chaque type de table spécifique. Cela permettra d'éliminer complètement les d'autre ifs comme il vient de devenir:

table.Update(); 

passer vers le bas tous les objets dont vous avez besoin à cet appel, puis récupérer la valeur de la table (car il peut mettre à jour sa propre propriété de date spécifique dans son mise en œuvre de Update()). Je m'excuse si j'ai la mauvaise extrémité du bâton mais je ne suis pas sûr à 100% ce que vous demandez pour être honnête.

0

Il semble aussi simple que vous devez faire ceci:

manager.Date = configDate; 

Ce qui signifie que je suis certainement mal ....

1

Non pas que je pense que ce qui est bon code, mais est-ce Qu'est-ce que tu cherches? Type

private DateTime configDate; 

private DateTime ConfigDate 
{ 
    get { return configDate; } 
    set 
    { 
    configDate = value; 
    ivdConfig.TheDate = value; 
    } 
} 
0

DateTime est un type de valeur, de sorte que le code ci-dessus suffit de copier la valeur de ivdConfig.LAST_UPDATE_SITE à dateToUpdate et non la référence.

Pour vous résoudre le problème, vous pouvez effectuer les opérations suivantes:

if (table == Tables.Asset) 
{ 
    content = WebService.GetTblAsset(companyId); 
    manager = ivdData.Instance.Asset; 
} 
else if (table == Tables.Site) 
{ 
    content = WebService.GetTblSite(companyId); 
    manager = ivdData.Instance.Site; 
} 
else if (table...) 
{ 
    ... 
} 

if ((content.Length > 0) && UpdateManager(manager, content)) 
{ 
    DateTime updateDate = DateTime.Now; 

    if (table == Tables.Asset) 
    { 
     ivdConfig.LAST_UPDATE_ASSET = updateDate; 
    } 
    else if (table == Tables.Site) 
    { 
     ivdConfig.LAST_UPDATE_SITE = updateDate; 
    } 
    else if (table...) 
    { 
     ... 
    } 
} 
+0

C'est quelque chose que je voulais éviter en raison du nombre de tables que j'ai à traiter. Cependant, si c'est le seul moyen, alors je suppose que je suis coincé à suivre ce modèle! – GenericTypeTea

0

Eh bien, il ne se produit à la méthode PropertyInfo.SetValue.

Questions connexes