-1
votes

Vérification si le paramètre d'objet contient DateTime

J'ai une méthode avec le paramètre d'objet afin qu'elle puisse être utilisée différemment par différentes méthodes d'appel. À l'intérieur de la méthode, je dois vérifier si le premier paramètre de l'objet est de la date ou non, sinon défini la date d'aujourd'hui.

CreateNew(fileData,new {portDate=portDate});
CreateNew(fileData,new {portDate=portDate,countries=countries});


5 commentaires

Je sens que vous abusez des types anonymes de C #. Pourquoi ne pas utiliser un paramètre tuple fortement typé à la place?


Ma recommandation ne dispose pas de méthodes écrites pour être utilisées différemment de différentes méthodes d'appel. Si AutresParams peut être des choses différentes, comment quelqu'un saurait-il ce que cela pourrait être? Si vous postez un exemple de ce que certaines des différentes variations sont sur https://softwareEngineering.stackexchange.com/ puis il pourrait y avoir des suggestions sur lesquelles les pièces peuvent être réutilisées et combinées et qui pour rester complètement séparées. Parce que la combinaison pour réduire la duplication est bonne, tout simplement pas de manière à faire obstacle aux intentions.


@Dai Ma compréhension pourrait être complètement tort, mais puis-je utiliser Tuple lorsque je ne suis pas toujours sûr du nombre de paramètres? Parce que dans le cas 1, il y a 1, dans le cas 2, il y a 2 et je pourrais avoir un cas où il y en a 3.


Vous ne pouvez pas utiliser de tuple pour cela, mais pourquoi ne pas créer une classe ordinaire?


Cela devrait être formalisé comme des signatures de méthode différentes.


3 Réponses :


4
votes

Vous pouvez utiliser dynamique au lieu de objet , puis vérifier xxx

si je suis d'accord avec le commentaire que vous semblez utiliser le commentaire que vous semblez utiliser classes anonymes de mauvaise manière. Si vous savez ce que vous recevez, créez simplement une classe réelle qui aura DateTime portate afin que vous sachiez bien.


0 commentaires

1
votes

Vous pouvez voir toutes les propriétés de l'objet et vérifier si l'une des thoses est DateTime xxx

fonctionnant également pour les paramètres dynamiques


0 commentaires

1
votes

Votre question indique que si d'autresparams code> n'est pas un DateTime code> Vous utiliserez datetime.now code>. Cela suggère que si d'autresparams code> n'est pas un DateTime code>, il n'est pas utilisé.

Si c'est le cas, une meilleure signature peut être la suivante: p> xxx pré>

qui donne clairement à l'appelant que portate code> est censé être un DateTime code>, mais c'est facultatif. Ensuite, vous pouvez faire cela: p> xxx pré>

de sorte que s'il n'a pas de valeur, il est remplacé par datetime.now code>. P>

S'il existe différentes façons de l'appeler, vous pouvez fournir des surcharges différentes en fonction de la façon dont il convient d'être appelé. p>

Vous pouvez également ajouter: p> xxx pré>

S'il est possible que l'un soit possible, mais ils ne devraient pas tous les deux être nuls, vous pouvez créer des signatures reflétantes Qu'ils présentent chacun d'eux appeler une méthode code> code> privée qui gère les NULLS. De cette façon, vous communiquez plus clairement les attentes. P>

Si quelque chose d'autre doit appeler une méthode similaire, mais le deuxième paramètre peut être quelque chose de totalement différent (pas une date), il est préférable de créer une méthode différente. Si le type du paramètre est objet code> et une possibilité est que cela pourrait être un datetime code> et il y a au moins un autre type correct, il n'y a aucun moyen pour l'appelant de savoir ce qu'ils devraient passer. Par exemple, ils pourraient appeler: P>

CreateNew(someFileModel, new List<string>());


0 commentaires