Avatar billede repsak Nybegynder
31. august 2003 - 11:41 Der er 10 kommentarer og
1 løsning

Statisk property

Jeg skal lave en property som er statisk og som skal fungere således:
bool user = Users.User['1'];

har prøvet mig frem med:
class Users{
  public static bool[] User[char index]{
    get{
      return new bool[]{true};
    }
  }
}

men den kan ikke compileres :-(

har søgt bl.a. på http://www.devarticles.com/art/1/507 men uden held
Avatar billede repsak Nybegynder
31. august 2003 - 11:42 #1
ups -
bool[] user = Users.User['1'];
Avatar billede z42cool Nybegynder
31. august 2003 - 11:55 #2
Du erklærer din property som et array (bool[]) og arrays kan kun indekseres med integers. Hvis du ønsker en collection der anvender chars som indexers bliver du nødt til at sub-klasse en af typerne i System.Collections eller System.Collections.Specialized namespacet. Hvis det er OK at du selv skal søge for kun at bruge chars som indexer, men at andet er lovligt kan du blot:

using System.Collections;

class Users{
  private static Hashtable User;
  public static Hashtable User
    get{
      return this.user;
    }
  }

  static User()
  {
    User.users = new Hashtable();
  }
}

Så kan du bruge den med:

User.users['1'] == true;
Avatar billede repsak Nybegynder
31. august 2003 - 12:02 #3
hmm oki, men det undrer mig at dette kan godt compile:
public bool[] this[char index]{
  get{
    return new bool[]{true};
  }
}
men ikke når det skal være statisk:
public static bool[] this[char index] (da static og this jo ikke kan bruges sammen) men det ser da ud til at chars er ok til indexes...? Man burde da kunne lave det uden at benytte Hashtabeller :-)
Avatar billede z42cool Nybegynder
31. august 2003 - 12:15 #4
Det er fordi at når du erklærer en property med this, så laver du en klasse indexer og der er det helt OK at bruge chars. Du kan dog stadig ikke indeksere et bool array med en char, så du får et problem når du skal til at bruge din klasse indexer.

private bool[] users = new bool[]{true, true, false, true};
public bool[] this[char index]{
  get{
    return this.users[index]
  }
}

Ovenstående vil ikke kompilere fordi du ikke kan indeksere et bool array med en char. Du kan godt lave du uden Hashtable, men du kan ikke lave det uden en collection af en eller anden slags når du vil indeksere med en char!
Avatar billede repsak Nybegynder
31. august 2003 - 12:50 #5
hmm du har måske sagt det, men bare for at være sikker :-)
jeg har en masse brugere som blir repræsenteret af f.eks 3 bool arrays:
bool[] user1
bool[] user2
bool[] userA

jeg vil så lave en property som ovenfor, hvor jeg vha en char kan få returneret det ønskede array, så:
bool[] myuser = Users.User['A'];

How? (som jeg forstår dig så kan det ikke gøres uden at bruge en af System.Collection klasserne)
Avatar billede z42cool Nybegynder
31. august 2003 - 13:13 #6
Har du et fast antal arrays eller et dynamisk antal arrays?
Avatar billede repsak Nybegynder
31. august 2003 - 17:46 #7
fast
Avatar billede z42cool Nybegynder
31. august 2003 - 18:01 #8
Så kan du gøre noget i stil med følgende:

public class User
{
  private static bool[][] user;

  public static Hashtable User
  {
    get
    {
      return User.user;
    }
  }

  static User()
  {
    User.user = new Hashtable();
    User.user.Add('a', new bool[]{true, true, false});
    User.user.Add('b', new bool[]{false, true, false});
    User.user.Add('c', new bool[]{false, false, true});
  }
}

Så kan du:

bool[] a = User.User['a'];
   
  }
}
Avatar billede repsak Nybegynder
31. august 2003 - 19:00 #9
cool takker - men der er vel ikke forskel fra dette og så hvis antallet var dynamisk???
Avatar billede repsak Nybegynder
31. august 2003 - 19:00 #10
svar :-)
Avatar billede z42cool Nybegynder
01. september 2003 - 08:37 #11
Nej, det er der ikke, jeg havde en anden idé med en switch sætning, men det kan kun lade sig gøre hvis det ikke er en statisk property så der er adgang til en indexer!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester