ValueTyp Struktur CSharp

Gast #2163950
Lesenswert?
• ▲
▼
Hallo, bin Neuling in C#
1
 static int hingabe(int i,ValueType x)
2
        {
3
           
4

5
            if (i == 1)
6
            {
7
                int a = 2;
8

9
                //int z = x.z;
10
                return a;
11
            }
12
            else
13
            {
14
                int b = 2;
15
                return b;
16
            }
17

18
        }

ValueType x ist eine Struktur, Struktur enthält integer z

Wie kann ich auf z zugreifen
Leider ist es nicht so leicht, wie ich dachte
Gast #2164422
Lesenswert?
• ▲
▼
Hauptprogramm
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5

6
namespace ConsoleApplication1
7
{
8
    
9

10

11
    class Program
12
    {
13

14

15
       
16

17

18
        struct datu
19
        {
20
            public int a;
21
            public int b;
22
            public int c;
23
        }
24
       
25

26
        static void Main(string[] args)
27
        {
28
            Class1 cl = new Class1();
29
            
30
          
31
            datu dat;
32
            ValueType de = null;
33

34
            
35
            dat.a=1;
36
            dat.b=1;
37
            dat.c=1;
38

39
            de=cl.rueckgabe(2);
40
            int i = (int)cl.hingabe(1,dat);
41
           
42

43
            Console.WriteLine(de);
44
            
45
            Console.WriteLine(dat);
46
            
47
            
48
            Console.ReadKey();
49

50
        }
51
    }
52
}
 Klasse mit Funktionen
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5

6
namespace ConsoleApplication1
7
{
8
    class Class1
9
    {
10

11
       public struct data
12
        {
13
        public int a;
14
        public int b;
15
        public int c;
16
        }
17

18
       public ValueType rueckgabe(int i)
19
       {        data dat;
20
                dat.a = 4;
21
                dat.b = 2;
22
                dat.c = 1;
23
                return dat;
24
            
25
            
26

27
        }
28

29
       public ValueType hingabe(int i,ValueType x)
30
       {
31
           Console.WriteLine(x);
32
           return i;
33
       }
34
    }
35
}

So weit geht es noch ohne Fehler. Ich will nun an die Strukturelemente 
a,b,c herankommen. Einmal in der Funktion hingabe und nach der Funktion 
rückgabe
Gast #2164432
Lesenswert?
• ▲
▼
irgendwie ist dein beispiel Merkwürdig

bei
 public ValueType rueckgabe(int i)

machst du

return dat;

aber dat ist vom Datentype data und nicht ValueType.

bei

public ValueType hingabe

machst du return i; was ein int ist also auch kein ValueType.

Ist das so gewollt?
Gast #2164592
Lesenswert?
• ▲
▼
ja das ist gewollt, ich kann so nämlich z.b. als return wert ein double 
oder int in der selben funktion zurückgeben. nun wollt ich mal versuchen 
ob das für strukturen auch klappt, die gehören ja auch mit zu valuetype. 
ich sehe die variablen in debug-modus ja auch , weiss nur nicht wie ich 
sieh ansprechen kann
Gast #2164612
Lesenswert?
• ▲
▼
Eric schrieb:
> als return wert ein double
> oder int in der selben funktion zurückgeben
und wozu? andere Personen sind froh wenn sie ein Typisierte sprache zu 
haben und du versucht genau das gegenteil davon zu erreichen.

Etweder macht man 2 funktionen für jeden Datentype den man braucht eine 
oder man verwendet dynamic cast.
#2164615
Lesenswert?
• ▲
▼
Eric schrieb:
> ja das ist gewollt, ich kann so nämlich z.b. als return wert ein double
> oder int in der selben funktion zurückgeben. nun wollt ich mal versuchen
> ob das für strukturen auch klappt, die gehören ja auch mit zu valuetype.
> ich sehe die variablen in debug-modus ja auch , weiss nur nicht wie ich
> sieh ansprechen kann

Casten...
ValueType ist nur eine spezielle Verpackung (Basisklasse) für 
Wertetypen.
1
public int fn(ValueType v) {
2
    if (!(v is data)) ...
3
    return ((data)x).a;
4
}
#2164755
Lesenswert?
• ▲
▼
Eric schrieb:
> auch der typcast geht nicht

Der sollte funktionieren
1
public struct data {
2
    public int a;
3
    public int b;
4
    public int c;
5
}
6

7
ValueType fn(ValueType v) {
8
    // data td = (data)v;
9
    // return td.c;
10
    // oder
11
    // int tc = ((data)v).c;
12
    // return tc;
13
    return ((data)v).c;
14
}
15

16
void testfn() {
17
     var t = new data { a = 1, b = 2, c = 3 };
18
     var res = fn(t);
19
}
Gast #2164814
Lesenswert?
• ▲
▼
1. entfern doch bitte unnötige leerzeilen, das erleichtert das lesen 
ungemein

2. gewöhn dir ganz ganz schnell kommentare an. ich mach c.a. alle 10 
zeilen einen. manchmal mehr, manchmal weniger. wenn man die routine 
einmal drin hat, ist das kein problem. und sei es nur "//load data into 
class"
das verständnis für den eigenen code sinkt nämlich exponentiell mit der 
zeit und der menge an code ^^

3. was soll dieses programm denn bezwecken?

4. casten NUR wenn wirklich nötig aber dann auch explizit. ich halt 
davon allgemein nicht so viel.

5. wenn schon generisch dann lieber object. solche spezialsachen wie 
valuetype (das ich auch nicht kenne) braucht man zu 95% eigentlich 
nicht. vor allem nicht, wenn man gerade anfängt.

bin auch kein programmierer von haus aus, lasse mich gerne korrigieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren