Unterscheidung Generisches Objekt / Liste(Of )

  • VB.NET
  • .NET (FX) 4.0

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Also ich habe nur C# und bei funktioniert es.

    Aber du musst doch auch noch den Typ angeben so ala:


    C#-Quellcode

    1. Class1 c = new Class1();
    2. List<int> li = new List<int>();
    3. object l1 = c.test1<int>(li); //verwendet die Methode mit List
    4. object l2 = c.test1(li); //verwendet die Methode mit Object als Parameter

    in vb dann vermutlich so:

    VB.NET-Quellcode

    1. dim c as new Class1()
    2. Dim li As New List(Of Integer)
    3. Dim l1 As Object = c.test1(Integer)(li) 'hier bin ich mir mit der Syntax nicht sicher.


    Gibst du das nicht an, dann wird die erste Methode verwendet
    Das ist meine Signatur und sie wird wunderbar sein!

    Souleater857 schrieb:

    ich hätte das schon gerne über eine
    Du hast ja zwei Prozeduren.

    Souleater857 schrieb:

    sonst hätte OptStrON schon geschrien.
    Das hatten wir bereits in Post #3.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Mono:
    nö - c# machts auch nicht besser.
    wie gesagt: ein Teil des Problems ist, dass die Fehlermeldung wegbleibt - also du denkst, funzt, aber tut was anneres. Mit Bildle kann mans zeigen:
    so grau gehighlightet sind alle Vorkommnisse der Methode, auf der der Cursor steht.
    Und wie du siehst, beide Aufrufe verweisen auf die erste Methode - die zweite ist "verwaist".



    Neuer Lösungsansatz: TypParameter-Einschränkungen:

    VB.NET-Quellcode

    1. Private Sub Foo()
    2. test1(42)
    3. test1(New List(Of Integer))
    4. End Sub
    5. Public Sub test1(Of T As IFormattable)(ByVal Obj As T)
    6. 'Tue etwas...
    7. End Sub
    8. Public Sub test1(Of T As IFormattable)(ByVal Lst As List(Of T), Optional ByVal clearList As Boolean = False)
    9. 'Tue etwas anderes...
    10. End Sub
    Das funzt jetzt richtig - aber nur mit formatablen Datentypen, wie integer, Single, TimeSpan etc..
    Weil jetzt ist die Unterscheidung eindeutig.
    Wo vorher eine List(Of T) ebensogut auch ein T war, weil T alles sein konnte, ist nun eine List(Of T) nicht mehr ein T, denn List(Of T) ist nicht formatable.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()