[C#] Run-time variabele namen binnen struct bepalen

Pagina: 1
Acties:

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 21-05 14:54
Voor een tooltje dat ik op dit moment aan het schrijven ben, gebruik ik een paar structures. Deze structures bevatten variable namen die gelijk zijn aan database velden die ik wil gaan uitlezen.

Nu wil ik eigenlijk run-time die structure-variabele namen uitlezen en daar een query van bouwen, maar ik krijg het niet voor elkaar om die namen op te halen.

Is dit mogelijk binnen C# ? Ik heb al in de MSDN libraries gekeken, maar daar kan ik er weinig over vinden.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
[google=C# reflection] is het antwoord.

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 21-05 14:54
Ik heb het geprobeerd en ik ben een aantal voorbeelden tegen gekomen , alleen allen spreken van classes ipv structures. Nou weet ik dat classes en structures niet zo ver van elkaar af liggen, maar waarschijnlijk doe ik nog wat fout :?

Dit is wat ik nu doe :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public struct cpu_info
{
    public int clock_speed; // 8
    public string description; // 11
    public string device_id; //12
    public int bus_speed; // 15
    public string family; // 16
    public int family_id; // 16
    public int processor_type; // 31
    public string name; //25
    public int datawidth; // 10
    public int availability; // 2
    public string socket; // 34
    public string status; // 35
    public int stepping; // 37
}

public cpu_info CPU(int number)
{
    Type MyType = Type.GetType("cpu_info");
    MemberInfo[] MyMemberInfoArray = MyType.GetMembers();

    Console.WriteLine("\nThere are {0} members in {1}",
    MyMemberInfoArray.GetLength(0), MyType.FullName);
}


maar dat pikt ie dus niet. Dan krijg ik een "Object reference not set to an instance of an object."

[ Voor 5% gewijzigd door sorted.bits op 08-10-2004 16:42 ]


  • Sanderfox
  • Registratie: Augustus 2003
  • Laatst online: 07-11-2025
Probeer eens 'class' ipv 'struct' , mss werkt dat wel :)

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 21-05 14:54
Nope, was het maar zo simpel ;)

  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
maar dat pikt ie dus niet. Dan krijg ik een "Object reference not set to an instance of an object."
Dat betekent dat jij of een ander stuk code een null-value gebruikt. Gooi het eens door de debugger om te zien welke variabele null is, want het is er waarschijnlijk een van je zelf. Dan zie je teminste welke aanroep heeft gefaalt en waar je je dus op moet concentreren.

Het zou me niets verbazen als je een null terugkrijgt bij die type-aanroep. Gebruik eens het keyword typeof of een Type object te verkrijgen. E.g. typeof(cpu_info). Dan weet je iig zeker dat 'ie een Type op levert.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 21-05 14:54
Infinitive schreef op 08 oktober 2004 @ 17:16:
[...]

Dat betekent dat jij of een ander stuk code een null-value gebruikt. Gooi het eens door de debugger om te zien welke variabele null is, want het is er waarschijnlijk een van je zelf. Dan zie je teminste welke aanroep heeft gefaalt en waar je je dus op moet concentreren.

Het zou me niets verbazen als je een null terugkrijgt bij die type-aanroep. Gebruik eens het keyword typeof of een Type object te verkrijgen. E.g. typeof(cpu_info). Dan weet je iig zeker dat 'ie een Type op levert.
De typeof op cpu_info levert "LCD_Control_XP.HardwareInfo+cpu_info" dit lijkt me gewoon goed.

Het lijkt er op dat na :
code:
1
Type MyType = Type.GetType("cpu_info");

de MyType op NULL blijft staan. Ik zoek nog even verder.

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 21-05 14:54
Ok, de oplossing, misschien handig voor het archief :)

Je moet je struct buiten je CLASS zetten (waarin je de reflection gebruikt), dan werkt het wel ;) weer wat geleerd.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ah zo; het ging ook wel werken als je die struct binnen je class gezet had denk ik, maar dan had je eerst Type moeten bemachten van het type van die class, en dan kijken of je de types kon bemachten die daarin gedeclareerd ware.

https://fgheysels.github.io/

Pagina: 1