Returnera variabler av olika sorter i C#?

Permalänk
Medlem

Returnera variabler av olika sorter i C#?

Jag har en klass i C# som plockar ut data ifrån en sql ce databas och ska returnera denna data. Hur gör jag enklast för att returnera data av olika sorter? Ska jag använda en tuple?

Permalänk
Medlem
Skrivet av Tallrot:

Jag har en klass i C# som plockar ut data ifrån en sql ce databas och ska returnera denna data. Hur gör jag enklast för att returnera data av olika sorter? Ska jag använda en tuple?

Det vanligaste är att fylla och returnera ett eller flera modellobjekt som innehåller all intressant data.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Hedersmedlem

Enklast är väl dock att returnera ett object och i efterhand lista ut vad det är?

Permalänk
Medlem

Kan man baka in flera variabler i ett object?

Permalänk
Hedersmedlem
Skrivet av Tallrot:

Kan man baka in flera variabler i ett object?

Bara en åt gången, men den skulle ju till exempel i sig kunna vara en object[]. Eller också returnerar man en object[].

Permalänk
Datavetare

Om du kör .Net4 eller senare så kan du använda dig av "dynamic"

dynamic foo(int x) { if (x == 0) return "aString"; if (x == 1) return 1.1; return x; } void bar() { // dessa går bra string s = foo(0); double d = foo(1); int i = foo(2); // Detta leder till exception vid körning, finns ju ingen // möjlighet att verifiera att det är korrekt vid kompilering string notReturningString = foo(123); }

Personligen tycker jag införandet av "dynamic" i ett statiskt typat språk bör ifrågasättas rätt starkt, men det nyckelordet löser det problem du nu har.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Tallrot:

Kan man baka in flera variabler i ett object?

Det är det objekt är till för:

Modellklass class PersonModell { public PersonModell(string namn, int ålder, string favoritfrukt) { Namn = namn; Ålder = ålder; Favoritfrukt = favoritfrukt; } public string Namn { get; private set; } public int Ålder { get; private set; } public string Favoritfrukt { get; private set; } }

Skapa en ny PersonModell med data från databasen och returnera den.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack för alla tips, ska prova att skapa en objectsklass som tar emot datan.

Permalänk
Medlem

Det är viktigt med favoritfrukten

Permalänk
Medlem
Skrivet av vajjan:

Det är viktigt med favoritfrukten

Det kan bli väldigt fel annars!

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Hur vore det att returnera en tabell och sen lägga värdena för sig?

Vet inte om jag är ute och cyklar men:

class Person
{
int ålder{get;set;}
string name {get;set;}
}

foreach (DataRow row in table.Rows)
{
lista.add(new person { ålder = Convert.ToInt32(row["age"].ToString()), name = row["name"].ToString()});
}

Vad man blir kvar med är ju: lista[0].name eller lista[0].ålder, kanske tänker fel.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Permalänk
Medlem
Skrivet av freddyfresh:

Hur vore det att returnera en tabell och sen lägga värdena för sig?

Vet inte om jag är ute och cyklar men:

class Person
{
int ålder{get;set;}
string name {get;set;}
}

foreach (DataRow row in table.Rows)
{
lista.add(new person { ålder = Convert.ToInt32(row["age"].ToString()) });
}

?

Du är inte ute och cyklar, det är ungefär samma som vad jag föreslår fast jag föredrar att returnera ett färdigt resultat snarare än en cursor.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd

Tycker frågan är lite vagt ställd, är det typ ett repository pattern du vill åt? Vet du vid användandet vad typen är? Om du vet typen där du ska använda klassen men du vill göra den generisk för alla typer av object så använd generics.

public abstract class Repository<TEntity> where T : Entity { protected abstract IDbSet<TEntity> DbSet; public IEnumerable<TEntity> ListBy(int id) { { return DbSet.Find(id); } }

Typ nått sådant

Visa signatur