Veldfout, hoe oplossen?

Status
Niet open voor verdere reacties.

pdedecker

Gebruiker
Lid geworden
19 jul 2008
Berichten
35
Ben nieuw bij Visual C#. Ik probeerde Generics eens uit toen ik op een fout botste. Hier is de code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QueueTest
{
public partial class QueueTest : Form
{
public QueueTest()
{
InitializeComponent();
}

private void btnQueue_Click(object sender, EventArgs e)
{
testQueue.Enqueue(txtQueue.Text);
}

private void btnDequeue_Click(object sender, EventArgs e)
{
string item = testQueue.Dequeue();
MessageBox.Show("Item was: {0}", item);
}

private void QueueTest_Load(object sender, EventArgs e)
{
Queue<string> testQueue = new Queue<string>();
testQueue.Enqueue("test");
}
}
}
testQueue.Enqueue("test"); wordt nog wel normaal uitgevoerd, maar die andere Generics-gerelateerde instructies buiten QueueTest_Load kunnen uiteraard niet worden uitgevoerd omdat testQueue gedeclareerd is buiten hun veld. Hoe los ik dit op?
 
Maak van deze:
Code:
Queue<string> testQueue = new Queue<string>();
Alleereerst eens een globale variabele, want anders is die alleen maar beschikbaar binnen de functie zelf en daardoor kan je foutmeldingen krijgen als je die in een andere functie aan wil roepen.
 
Bedoel je dit?

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QueueTest
{
    public partial class QueueTest : Form
    {
        [B]public static Queue<string> testQueue = new Queue<string>();[/B]

        public QueueTest()
        {
            InitializeComponent();
        }

        private void btnQueue_Click(object sender, EventArgs e)
        {
            testQueue.Enqueue(txtQueue.Text);
        }

        private void btnDequeue_Click(object sender, EventArgs e)
        {
            [B]string item;[/B]

            try
            {
                [B]item = testQueue.Dequeue();[/B]
            }
            catch (InvalidOperationException error)
            {
                [B]item = "niet beschikbaar. Foutmelding was: " + error;[/B]
            }
            MessageBox.Show("Item was: " + item);
        }

        private void QueueTest_Load(object sender, EventArgs e)
        {
            testQueue.Enqueue("test");
        }
    }
}

En dan nog iets. Ik heb een try/catch-blok proberen te maken om de foutmelding op te vangen die optreedt als de queue leeg is. Ik heb wat moeten prutsen voordat C# niet meer zeurde over veldfouten in het blokje waar ik de string 'item' gebruik. Is dit de beste manier om het op te lossen? Met andere woorden: kan ik de string 'item' best aanmaken vòòr het try/catch-blok als ik ze zowel in het try- als catch-blok nodig heb?
 
Ja, zo bedoel ik die.

Wil je de string Item ook nog ergens anders in je code gaan gebruiken? zo ja, dan kan je deze het beste eerst globaal aanmaken want anders is die net als de queue eerst alleen binnen de functie te gebruiken.
 
Nee, het is maar een simpel testprogrammaatje dus heb ik de string 'item' niet buiten de functie nodig. Ik denk dat ik het systeem een beetje doorheb. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan