2009-09-22 2 views
0

je suis arrivé cette ligne de code et il devient dupliquées beaucoupcomment vous réécrivez cette ligne de code pour être plus générique

myString = If(myObj1.myProp Is Nothing, "", If(want = "abr", myObj1.myProp.abr, myObj1.myProp.desc)) 

cette ligne x n, il suffit de changer « myObj1 » à " quoi que ce soit "et" myProp "à" quoi que ce soit "

J'ai essayé

Public Function getDesc(Of t)(ByVal obj As t) As String 
    Return If(obj Is Nothing, "", If(want = "abr", obj.abr, obj.Desc)) 
End Function 

le problème ici est t ne sait pas qu'il a abr/desc propriétés

+0

Pouvez-vous expliquer un peu plus ce que myProp, veulent, abr et desc sont? Y a-t-il une relation entre myProp et Prefix? –

+0

@ Meta-Knight, corrigé mon exemple de code – Fredou

Répondre

4

Créer une méthode, et passer dans les parties variables comme arguments.

Créez la méthode en tant que telle, afin que la méthode sache que T a ces propriétés spécifiques. Mettez une contrainte sur votre type générique (définissez que T doit hériter d'une sorte d'interface dans laquelle ces propriétés sont définies).

En C#, vous pouvez le faire comme ceci. (Cela peut également être fait dans VB.NET, mais je ne connais pas la syntaxe). L'interface 'ISomeInterface' devrait alors définir les propriétés abr et Desc. Vous devrez également vous assurer que les types que vous utilisez dans votre appel de méthode, implémenter cette interface, sinon vous obtiendrez une erreur de compilation.

Je crois que, dans VB.NET, il ressemblerait à quelque chose comme ths:

Public Function getDesc(Of t As ISomeInterface)(ByVal obj As t) As String 
    Return If(obj Is Nothing, "", If(want = "abr", obj.abr, obj.Desc)) 
End Function 
0

Une méthode est la voie à suivre. Vous pouvez ensuite remplacer cette ligne de code dans votre programme par le nom de la méthode et transmettre les paramètres appropriés. Cela signifie également que si vous devez changer cette ligne de code dans le futur, il vous suffit de la changer à l'intérieur de la méthode et non à chaque point du code où la ligne apparaît.

1

Vous pouvez créer une interface pour toutes les classes avec une abreviation et la description, quelque chose comme:

Public Interface IObjectWithDescription 

    Property Abreviation As String 
    Property Description As String 

End Interface 

Ensuite, mettre en œuvre cette interface pour tous les objets avec ces propriétés. Ensuite, vous pourriez avoir:

Public Function getDesc(ByVal obj As IObjectWithDescription, want As String) As String 
    Return If(obj Is Nothing, "", If(want = "abr", obj.Abreviation, obj.Description)) 
End Function 

Je vous conseille de trouver un meilleur nom pour l'interface bien, je ne sais pas assez de détails au sujet de votre problème pour trouver un ;-)

+0

que se passe-t-il si l'objet est une entitéref de linq2sql? – Fredou

Questions connexes