2010-03-25 4 views
2

Salut tout ce que j'ai le code suivant:Convertir à partir de la liste personnalisée à la liste des cordes

Public Shared Function ConvertToString(ByVal list As IList) As String 
     Dim strBuilder = New System.Text.StringBuilder() 
     Dim item As Object 
     For Each item In list 
      strBuilder.Append(obj.ToString()) 
      strBuilder.Append(",") 
     Next 
     Return strBuilder.ToString(strBuilder.Length - 1) 
    End Function 

L'intention est de convertir un IList d'objets personnalisés à une chaîne équivalente comprenant chaque élément dans IList. Malheureusement, je n'arrive pas à trouver un moyen d'obtenir les données sous-jacentes de l'objet personnalisé, et bien sûr, comme dans l'exemple ci-dessus, utiliser object me donne simplement une chaîne de définitions de types plutôt que l'accès aux données sous-jacentes. Toute aide très appréciée.

Paul.

Répondre

0

Si vous contrôlez l'objet personnalisé, vous pouvez remplacer la fonction ToString pour renvoyer le type de données de chaîne que vous voulez voir.

I can't seem to find a way to get the underlying data of the custom object, 

Comment ça marche? Qu'avez-vous essayé? Vous devriez être capable de lancer le type ou l'obtenir par réflexion. Peut-être que vous pouvez nous montrer un peu plus de code?

2

Il n'y a pas de représentation par défaut des "données sous-jacentes" dans un objet. Tout dépend de ce que vous voulez voir. Supposons, par exemple, que vous ayez une classe Person et qu'elle possède des propriétés FirstName et LastName. Vous avez une instance où FirstName = "John" et LastName = "Smith". Quelle serait la représentation par défaut des données sous-jacentes? "John Smith"? "Smith, John"? Autre chose? C'est pourquoi je suppose que .NET retourne le nom du type dans la méthode ToString si vous n'avez pas surchargé cette méthode pour afficher quelque chose de plus utile. Le cadre n'a aucun moyen de savoir ce qui serait une représentation utile des données sous-jacentes d'une classe donnée. Donc, je ne pense pas que vous puissiez faire fonctionner votre méthode pour des classes arbitraires. Si vous avez un petit ensemble spécifique de classes pour lesquelles vous voulez que cela fonctionne, vous pouvez remplacer ToString comme Paul Sasik suggère de fournir une représentation de chaîne utile pour eux. Ou, si vous n'avez pas accès au code pour ces classes, vous pouvez ajouter une méthode d'extension pour chacune d'entre elles, GetUnderlyingData ou quelque chose comme ça, et appeler cette méthode d'extension au lieu de ToString.

+0

Merci les gars, le remplacement a fonctionné. Je ne peux pas penser pourquoi je n'ai pas pensé à cela dès le début, évidemment pas assez de caféine LOL. –

Questions connexes