Permalänk
Medlem

VB till C# Collections problem

Hej alla glada!

Jag håller på att konvertera ett VB projekt till ett C# projekt. (Mest för att lära mig själv och förstå)
Hur som helst. I VB ser det ut såhär:

Public colRecord As Collection
swFile.WriteLine(colRecord.Item(portNumber)) 'Detta funkar utan problem

I C#:

Public Collection colRecord;
swFile.WriteLine(colRecord.Item(portNumber)); //Detta funkar inte. Jag hittar inget som kan ersätta ".Item" heller.

Mina usings är System.Collection.Generic;

Visa signatur

ASUS X99 Deluxe II | Intel i7 6850K 3.6 GHz | 2 x GTX 1080 Strix | 4 x Corsair 8 GB DDR4 3000 MHz CL15 Vengeance | Samsung 850 Evo 500 GB | OCZ Vertex 4 128 GB | Western Digital 2 TB

Permalänk
Medlem
Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av xenopsy:

Hej alla glada!

Jag håller på att konvertera ett VB projekt till ett C# projekt. (Mest för att lära mig själv och förstå)
Hur som helst. I VB ser det ut såhär:

Public colRecord As Collection
swFile.WriteLine(colRecord.Item(portNumber)) 'Detta funkar utan problem

I C#:

Public Collection colRecord;
swFile.WriteLine(colRecord.Item(portNumber)); //Detta funkar inte. Jag hittar inget som kan ersätta ".Item" heller.

Mina usings är System.Collection.Generic;

Det finns ingen typ som heter "Collection" i System.Collections.Generic: http://msdn.microsoft.com/en-us/library/system.collections.ge...

Du har ICollection som är ett interface som tar en typparameter, exempelvis ICollection<string> (alla typer i Collections.Generic tar typparametrar, därav "Generic")

För att deklarera en publik instansvariabel av den typen skriver du

public ICollection<string> ColRecord;

Vanligare är att använda en property för att förhindra att instansen slängs bort eller sätts om utifrån

public ICollection<string> ColRecord { get; private set; }

(detta går även att göra med readonly-modifikatorn men properties är flexiblare.)

Notera litet 'p' i public.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd
Skrivet av Teknocide:

(detta går även att göra med readonly-modifikatorn men properties är flexiblare.)

För att förtydliga Teknocide svar
Den blir inte immutable förrens du gör

private readonly ICollection colRecord; public MyClass(ICollection colRecord) { this.colRecord = colRecord; } ColRecord { get { return colRecord; } }

Lite mer kod än i Teknocide exempel, men ovärderligt i större projekt när utvecklarna annars ofta förstör staten på objekt
ColRecord är inget bra namn btw

Visa signatur