Autor Beitrag
master147
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 05.05.12 13:30 
Hallo,

ich habe ein Programm zur Feiertagsberechnung geschrieben. Das Problem ist bloß das ich in eine Textbox ein Datum eingeben will und meine 2 List's in der Klasse durchsucht werden sollen und bei einem Fund das Ergebnis ausgegeben werden soll. Nun habe ich aber das Problem das meine List's nur in den entsprechenden 2 Methoden verfügbar ist.

Hier ist der Code:
ausblenden volle Höhe C#-Quelltext
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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
public static List<string> FesteFeiertage(int jahr)
        {
            //Feste Feiertage in Liste eintragen und aktuelles Jahr hinzufügen

            List<string> Fest = new List<string>();
            Fest.Add("Neujahr " + "(01.01." + jahr + ")");
            Fest.Add("Tag der Arbeit " + "(01.05." + jahr + ")");
            Fest.Add("Tag der Deutschen Einheit " + "(03.10." + jahr + ")");
            Fest.Add("Reformationstag " + "(31.10." + jahr + ")");
            Fest.Add("1. Weihnachtsfeiertag " + "(25.12." + jahr + ")");
            Fest.Add("2. Weihnachtsfeiertag " + "(26.10." + jahr + ")");


            return Fest;  //Rückgabe der Liste
        }

        public static List<string> BeweglicheFeiertage(int jahr)
        {
            DateTime Ostersonntag = GetOstersonntag(jahr);



            List<string> Beweg = new List<string>();

            //Beweg.Add("Gründonnerstag " + Ostersonntag.AddDays(-3));
            Beweg.Add("Karfreitag " + "(" + Ostersonntag.AddDays(-2).ToShortDateString() + ")");
            Beweg.Add("Ostersonntag " + "(" + Ostersonntag.ToShortDateString() + ")");
            Beweg.Add("Ostermontag " + "(" + Ostersonntag.AddDays(+1).ToShortDateString() + ")");
            Beweg.Add("Christi Himmelfahrt " + "(" + Ostersonntag.AddDays(+39).ToShortDateString() + ")");
            Beweg.Add("Pfingstmontag " + "(" + Ostersonntag.AddDays(+50).ToShortDateString() + ")");


            return Beweg;
}

Kann man die List Beweg und Fest als globale Variable definieren, damit ich auch in der Suchmethode darauf zugreifen kann ?

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt
Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Sa 05.05.2012 um 13:45
daeve
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116
Erhaltene Danke: 3

Windows (XP Pro, 7 Ultimate x64)
C#,WPF,Java,ASP.Net, VS 2010 Ultimate (x86)
BeitragVerfasst: Sa 05.05.12 21:15 
ja wiso nicht ? wenn du diese Funktion benötigst.
master147 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 05.05.12 22:15 
Aber wie definiere ich die List den global ?
Bei mir funktioniert das irgend wie nicht. Es wäre nett wenn ihr mir mal ein Beispiel zeigen könntet wie man eine List global definiert.
daeve
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116
Erhaltene Danke: 3

Windows (XP Pro, 7 Ultimate x64)
C#,WPF,Java,ASP.Net, VS 2010 Ultimate (x86)
BeitragVerfasst: Sa 05.05.12 23:24 
du musst deine Liste einfach aus der Methode nehmen und direkt in die Klasse schreiben
master147 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: So 06.05.12 10:19 
Wenn ich das mache sieht das in meiner Klasse so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Feiertagsberechnung
{
    class Feiertag
    {
        List<string> Fest = new List<string>();

        public static DateTime GetOstersonntag(int jahr)
        {
           .....
        }


Das Problem ist wenn ich in meiner Suchmethode den Klassennamen schreibe und danach den Punkt setze kommt nicht die Liste Fest.

Was mache ich das falsch ?
So sieht meine Suchmethode bis jetzt aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
public static List<string> Suche (int jahr)
        {
          Feiertag.
        }
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 06.05.12 10:49 
Hallo,

die MemberVariable muß dann natürlich auch static sein.

Ich empfehle jedoch, daß du diese Variable wieder lokal machst, denn deine Methoden erzeugen ja diese Liste und geben sie als Rückgabewert zurück.

Die aufrufende Klasse (bzw. Instanz) kann sich diese natürlich in einer (Member-)Variablen merken:
ausblenden C#-Quelltext
1:
2:
3:
4:
List<string> festeFeiertage, beweglicheFeiertage; // als Member oder lokal

festeFeiertage = Feiertag.FesteFeiertage(jahr);
beweglicheFeiertage = Feiertag.beweglicheFeiertage(jahr);


Als nächsten Schritt solltest du aber anstatt string eine eigene Datenstruktur (-klasse) verwenden, so daß du Name und Datum getrennt hältst (damit du mit den Datumswerten auch Vergleiche oder Berechnungen anstellen kannst), sonst wird deine Suchmethode unnötig kompliziert.
Oliver M.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109
Erhaltene Danke: 1

Win 8 CP
VS 11 Beta
BeitragVerfasst: So 06.05.12 10:50 
Du musst
ausblenden C#-Quelltext
1:
public List<string> Fest = new List<string>();					

oder
ausblenden C#-Quelltext
1:
internal List<string> Fest = new List<string>();					

schreiben.

Tipp: Wenn du Anfänger in C# bist, empfele ich dir das Buch „Visual C# 2008“ (bzw. das für deine Visual Studios Version) von Dirk Louis. Ich habe es selbst und bin sehr zufrieden damit (-:
master147 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Sa 19.05.12 21:38 
Danke das hat funktioniert