Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Μετατροπή Ακεραίου σε String που αποτελεί όρισμα συνάρτησης

Îåêßíçóå áðü ôï ìÝëïò urbantoilet. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 07-11-2008, 13:46. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  07-11-2008, 11:48 46071

    Μετατροπή Ακεραίου σε String που αποτελεί όρισμα συνάρτησης

    Καλημερα, καλησπερα, Smile
    Προσπαθω εδω και καποιες μερες να καταφερω ανεπιτυχως το εξης:
    Καλω στον HTML κωδικα μου την συναρτηση FormatImages με 5 strings για ορίσματα:

    <table>
    <tr>
        <%#FormatImages(Eval("Image1"), Eval("Image2"),Eval("Image3"),Eval("Image4"),Eval("Image5"),%>
    </tr>
    </table>

    η οποια βρισκεται στο behind code μου:

     Public Shared Function FormatImages(ByVal Image1 As Object, ByVal Image2 As Object, ByVal Image3 As Object, ByVal Image4 As Object, ByVal Image5 As Object) As String
            Dim retStr As String = ""
            Dim i as Integer = 0

            for i =0 to 5
            retStr & ="<td><img src='images/BIGIMAGES/Image ???(i)???'/></td>"
            next
            Return retStr
        End Function

    Ti πρεπει να προσθεσω στον κωδικα με τα ????????
    Αυτο που θελω να πετυχω ειναι να περασω την μεταβλητη i στο string του src ετσι ωστε να το αντιληφθει ως ορισμα και να  εμφανισω στη σελιδα και  τα 5 images.
    Ευχαριστω πολυ!


  •  07-11-2008, 12:32 46073 σε απάντηση της 46071

    Απ: Μετατροπή Ακεραίου σε String που αποτελεί όρισμα συνάρτησης

    Η String.Format αντικαθιστά τους placeholders που υπάρχουν μέσα σε ένα string με την τιμή των παραμέτρων που της δίνεις. Στην περίπτωση σου :

    retStr &= String.Format("<td><img src='images/BIGIMAGES/Image {0} /></td>",i)

    Tο placeholder είναι το {0}. Αν είχες περισσότερες παραμέτρους θα έβαζες {0} στη θέση που θέλεις να εμφανιστεί η πρώτη παράμετρος, {1} στη θέση της δεύτερης κλπ.

    Πρέπει να προσέξεις επίσης κάτι άλλο. Τα string στο .ΝΕΤ είναι immutable και κάθε αλλαγή σε ένα string δημιουργεί ένα νέο και πετάει το παλιό. H retStr &= καταστρέφει την παλιά τιμή του retStr και δημιουργεί μία νέα. Αυτό οδηγεί σε πολλά, πολλά χαμένα CPU cycles. Αντί γι αυτό μπορείς να χρησιμοποιήσεις την κλάση StringBuilder η οποία μαζεύει όλες τις αλλαγές σε ένα εσωτερικό πίνακα και σου επιστρέφει ένα string μόνο όταν τελειώσεις. Μπορείς για παράδειγμα να γράψεις

    Dim myBuilder as New StringBuilder

    for i as Integer=0 to 5
    myBuilder.AppendFormat("<td><img src='images/BIGIMAGES/Image {0}'/></td>",i)
    next
    Return myBuilder.ToString()

    Τέλος, επίτηδες ορίζω το i μέσα στο For γιατί έτσι αποφεύγω να κυκλοφορεί μία άχρηστη μεταβλητή σε μεγαλύτερο scope από αυτό που είναι απολύτως απαραίτητο. Γενικά είναι καλή τακτική να ορίζεις τις μεταβλητές όσο πιο κοντά μπορείς στο σημείο που θα της χρησιμοποιήσεις, και να μην τους δίνεις μεγαλύτερο scope από αυτό που χρειάζεται. Έτσι αποφεύγεις πολλά προβλήματα όπως π.χ. να χρησιμοποιήσεις κατά λάθος μία μεταβλητή η οποία ήδη έχει τιμή από προηγούμενο loop, ή να παραμείνουν βαρυά αντικείμενα (π.χ. connections) ανοικτά για περισσότερο χρόνο απ' όσο νομίζεις.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-11-2008, 13:33 46081 σε απάντηση της 46073

    Απ: Μετατροπή Ακεραίου σε String που αποτελεί όρισμα συνάρτησης

    Παναγιωτη ευχαριστω για την απαντηση,
    με βοηθησε πολυ η μεθοδος String.Format σε αλλη δουλεια μου , αλλα το συγκεκριμενο προβλημα για το οποιο εκανα το POST παραμένει .
    Ο λογος ειναι ο εξης:
    Επειδη οι μεταβλητες Image1 , Image2 , ... , Image5 αποτελουν ορισματα της συνάρτησης FormatImages, μεσα στην συναρτηση καλουνται:

    retStr &= "<td style='border: solid 1px #FF8A00;'><a href='#'> <img src='img/" &  Image1 & "' width='42'  height='42' alt='Zoom' ></a></td>"

    αν εγω χρησιμοποιησω την String.Format ως:
    retStr &=String.Format ( "<td style='border: solid 1px #FF8A00;'><a href='#'> <img src='img/ " &  Image{0} & " ' width='42'  height='42' alt='Zoom' ></a></td>", i) ή
    retStr &=String.Format ( "<td style='border: solid 1px #FF8A00;'><a href='#'> <img src='img/ &  Image{0} & ' width='42'  height='42' alt='Zoom' ></a></td>", i)
    μου πεταει λαθος οπως ειναι λογικο : 'Image' is a type and cannot be used as an expression.
    Μπορώ να κανω κατι για να αντιληφθει το string σαν ορισμα ??

    Ευχαριστω προκαταβολικά.Smile
  •  07-11-2008, 13:46 46083 σε απάντηση της 46081

    Απ: Μετατροπή Ακεραίου σε String που αποτελεί όρισμα συνάρτησης

    Αυτό που κάνεις δεν έχει σχέση με αυτό που σου έγραψα. Εξάλλου, το {} ισχύει μόνο μέσα σε ένα string και όχι έξω από αυτό, όπως έκανες εδώ. Προφανώς, θέλεις κάπου να περάσεις τα ονόματα των εικόνων, και αυτές δεν ονομάζονται Image 0, Image 1, Image 2 όπως φαινόταν στο αρχικό σου post.
    Ποιά είναι τα ονόματα των εικόνων και από που τα παίρνεις? Τί είναι αυτά τα Image1 as object? Γιατί χρησιμοποιείς Eval? Αν ήταν να περάσεις τις τιμές "Image1" κλπ δεν χρειάζεται το Eval. Μήπως χρησιμοποιείς data binding και το Image1 είναι στην πραγματικότητα το όνομα του πεδίου με το path της εικόνας?

    Για πες μας τί προσπαθείς να κάνεις, όχι πως νομίζεις ότι γίνεται για να δούμε τί συμβαίνει.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems