Visualizzazione dei risultati da 1 a 7 su 7

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    Scusate ragazzi cerco di spiegarmi meglio.

    Io ho una classe creata da me: cls_Tilesets che contiene 3 proprietà pubbliche (Id, Nome, Lista) e creo una nuova list(of T) di quel tipo.

    codice:
    dim miaLista as new list(of cls_Tilesets)
    La lista è correttamente popolata con altre funzioni.

    L'errore è che l'intellisense non mi prende il codice LINQ Lambda quando provo a filtrare la lista.

    Io vorrei fare una cosa del genere:

    codice:
    dim mioTileset as cls_Tilesets = miaLista.where(function(t) t.id=30).single
    ma non me lo fa fare come se miaLista non fosse un IEnumerable!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    ma non me lo fa fare come se miaLista non fosse un IEnumerable!
    Hai importato il namespace System.Linq?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Scusate ragazzi cerco di spiegarmi meglio.

    Io ho una classe creata da me: cls_Tilesets che contiene 3 proprietà pubbliche (Id, Nome, Lista) e creo una nuova list(of T) di quel tipo.

    codice:
    dim miaLista as new list(of cls_Tilesets)
    La lista è correttamente popolata con altre funzioni.

    L'errore è che l'intellisense non mi prende il codice LINQ Lambda quando provo a filtrare la lista.

    Io vorrei fare una cosa del genere:

    codice:
    dim mioTileset as cls_Tilesets = miaLista.where(function(t) t.id=30).single
    ma non me lo fa fare come se miaLista non fosse un IEnumerable!
    Ok, allora dovrebbe essere semplice, a livello di compilazione potrebbe anche passare quello che hai scritto, ma il problema principale è che è inutile scrivere un where seguito da un single per ricavare un singolo elemento, ti porterebbe con buona probabilità ad ottenere un errore che a volte può sembrare random ed essere confuso con altro. Infatti il tuo codice in sostanza prima filtra un gruppo di risultati che idealmente hanno diversi candidati (Where) non necessariamente senza doppioni, successivamente usare single senza ulteriori criteri potrebbe mandare in errore il tutto a causa del fatto che ci sono due o piu candidati, perché single accetta un solo candidato possibile (va in errore anche se non ci sono elementi candidati). Inoltre fai due passaggi e non uno...
    codice:
    miaLista.Single(function(s)d.id=3)
    questo fa lo stesso che facevi prima ma con un passaggio (illogico) in meno.
    Inoltre come suggerito in precedenza potresti usare FirstOrDefault() o LastOrDefault() ecc. per evitare errori in caso di candidati multipli.

    prova ad usare First al posto di Single per vedere se va in errore comunque.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.