2009-06-19 11 views
5

documenti Embaracdero "IsEmpty" methods per tipi di stringhe, che ho utilizzato correttamente con il codice C++ Builder.È possibile utilizzare i metodi stringa "IsEmpty" in Delphi

WideString s; 

if (s.IsEmpty()) 
    .... 

ho provato lo stesso da Delphi, e non poteva farlo per compilare:

var s: WideString; 
begin 
    if s.IsEmpty then 
    .... 

So che si può confrontare con una stringa vuota, o chiamare la funzione di lunghezza, ma è possibile chiamare questo metodo IsEmpty da Delphi?

EDIT: Giusto per chiarire, questo non è stato inteso come un problema di String vs Widestring.

Fondamentalmente, il documento di collegamento I sopra descrive una sintassi Pascal e una C++, ma non sembra funzionare. Presumo che questo sia solo un difetto nella documentazione.

Restituisce vero se System :: WideString :: WideString è vuoto.

Pascal: Funzione IsEmpty: bool;

+0

Cosa l'implementazione C++ assomiglia? –

+1

Potresti non pensare che si tratti di un problema di stringhe WideString vs., ma lo è. –

+0

@Craig - La domanda non dovrebbe coinvolgere stringhe, solo WideStrings. Puoi elaborare? – Roddy

risposta

14

Stringa non è una classe in Delphi, quindi non ha metodi, devi usare le funzioni per le manipolazioni di stringhe come Lunghezza, Copia, ecc ... La stringa è una classe in C++ quindi forse sei confuso da quello.

+0

Grazie. Questo è il nocciolo: i tipi di stringhe sono tutte le classi in C++, ma non in Delphi. La documentazione di Codegear è errata elencare equivalenti pascal a questi metodi. – Roddy

+0

La mia ipotesi è che gli equivalenti Pascal nell'aiuto si riferiscano probabilmente a Delphi.NET dove le stringhe * sono * le classi ...(non l'ho ancora controllato) –

+0

Sì, la documentazione di Delphi è tutta incasinata in queste versioni, ma almeno CodeGear sta cercando di raccogliere qualcosa di meglio tramite gli aggiornamenti. – idursun

1
if Trim(s)='' then 

???

+1

So che ci sono altri modi. Voglio sapere se IsEmpty può effettivamente essere usato. – Roddy

+3

function IsEmpty (s: string): boolean; inizio; risultato: = lunghezza (s) = 0; fine; Ora puoi usarlo ;-) –

5

No. stringa non è WideString, anche in D2009. Non vorresti, neanche; il confronto con la stringa nil/empty è molto più veloce di una chiamata al metodo.

In Delphi:

var 
    s: string; 
begin 
    if s = '' then begin 
    ShowMessage('It is empty or nil.'); 

... per stringa rileva sia nullo e la stringa vuota (che è = nil).

+0

"confronto con nullo" - Puoi mostrare un esempio? – Roddy

+0

Okaayyyy. Ho capito: [Errore DCC] Unit69.pas (31): E2010 Tipi incompatibili: 'stringa' e 'Puntatore' Cosa sto facendo male? (questo con D2007, a proposito.) – Roddy

+0

Errore nel mio esempio. Fisso. Il punto è che Delphi in realtà è paragonabile a zero sotto il cofano (guarda al disassemblaggio). –

5

Delphi è un linguaggio ibrido. Contiene tipi e classi di base. Solo le classi (e i record e gli oggetti) possono contenere metodi.

La stringa è un tipo di base, anche se speciale. È l'unico tipo che ha una parola riservata. Ecco perché è spesso scritto con una minuscola (stringa) a differenza di altri tipi che hanno un captial iniziale (intero).

è possibile se si desidera:

type 
    TString = class 
    private 
    FString: string; 
    public 
    constructor Create(const AValue: string); 

    property &String: string read FString write FString; 
    property IsEmpty: Boolean read GetIsEmpty; 
    // ... 
    end; 
+0

cosa significa "& String"? –

+1

È possibile aggiungere come prefisso una parola riservata (come una stringa o while) a e per usarla come identificatore normale. –

Problemi correlati