[C#] Console Applicatie Array aanmaken

Pagina: 1
Acties:
  • 411 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • STIMPPYYY
  • Registratie: December 2001
  • Laatst online: 09:05
Probeer een Array aan te maken, die willekeurig 100 getallen genereerd, rijen van 10 bij 10.

Hij geeft alleen de volgende error: [b]The type or namespace name 'Sort' does not exist in the namespace 'Array' (are you missing an assembly reference?) [b/]

Naar mijn weten moet dit gewoon kloppen en is Array.Sort gewoon een method die je kan uitvoeren.

Kan niet echt nuttige info vinden op google.nl en google.nl/codesearch

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
namespace Array
{
    class Program
    {
        static void Main(string[] args)
        {
            Random ar = new Random();
            int [] mijnrij = new int [50];
            for (int i = 0; i < mijnrij.Length; i++)
            {
                mijnrij[i] = ar.Next(100);
                Console.Write("{0:d2} ", mijnrij[i]);
                if (i % 10 == 9) Console.WriteLine();
            }
            Console.WriteLine();
            Array.Sort(mijnrij);
            for (int i = 0; i < mijnrij.Length; i++)
            {
                Console.Write(" {0:d2} ", mijnrij[i]);
                if (i % 10 == 9) Console.WriteLine();
            }

        }
    }
}


De volgende info komt msdn mee.

Error Message
The type or namespace name 'name' does not exist in the namespace 'namespace' (are you missing an assembly reference?)


A type was expected. Possible reasons include:

An assembly that contains the definition of a type was not referenced in the compilation; use /reference (Import Metadata) to specify the assembly.

You passed a variable name to the typeof operator.

See Add Reference Dialog Box for information on how to add a reference in the development environment.

The following sample generates CS0234:

code:
1
2
3
4
5
6
7
8
9
10
11
 Copy Code
// CS0234.cs
public class C
{
   public static void Main()
   {
      System.DateTime x = new System.DateTim();   // CS0234
      // try the following line instead
      // System.DateTime x = new System.DateTime();
   }
}

  • beany
  • Registratie: Juni 2001
  • Laatst online: 17-09 13:56

beany

Meeheheheheh

Met Array.Sort verwijs je naar de (lokale) namespace Array en daar de methode Sort in. Maar die bestaat niet. Verander de namespace waar je in werk, of gebruik de volledige naam van de Array die je eigenlijk bedoelt(System.Array.Sort ?)

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


  • whoami
  • Registratie: December 2000
  • Nu online
Array is geen namespace, maar een class.
Sort is een static method van de class Array.

Jij hebt wellicht een probleempje omdat je (eigen) namespace ook Array heet.
Doe eens:
code:
1
System.Collections.Array.Sort ( bla );

[ Voor 44% gewijzigd door whoami op 12-09-2007 15:06 ]

https://fgheysels.github.io/


  • STIMPPYYY
  • Registratie: December 2001
  • Laatst online: 09:05
Ah het werkt.

Namespace is nu Test

Nou ziet hij Array.Sort wel.

Bedankt voor de info, ben weer een stapje wijzer geworden. Misschien nu de gelegenheid er toch is een andere vraag.

Ik probeer ook een programma te schrijven, in een windows application, die sleutels uit het register haalt, deze leest en herschrijft. Dit moet ook mogelijk zijn op een netwerk dmv een IP in te voeren.

Nou lukt het me om code's te lezen en subkeys te maken, zowel lokaal als op het netwerk. Alleen kan ik geen register sleutels schrijven/deleten e.d..

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
26
27
28
29
30
31
32
33
34
35
36
37
38
String remoteName = txtIP.Text;
            RegistryKey softwareKey, softwareKey2, softwareKey3;
        
            try
            {
                // Open HKEY_LOCAL_MACHINE\SOFTWARE
                // on a remote computer.
                softwareKey = RegistryKey.OpenRemoteBaseKey
                (RegistryHive.LocalMachine, remoteName).OpenSubKey("SOFTWARE\\ORL\\WinVNC3");

                //Nieuwe Subkey maken in WinVNC
                softwareKey2 = RegistryKey.OpenRemoteBaseKey
                (RegistryHive.LocalMachine, remoteName).CreateSubKey("SOFTWARE\\ORL\\WinVNC3\\Test");

                //Subkey deleten
                softwareKey3 = RegistryKey.OpenRemoteBaseKey
                (RegistryHive.LocalMachine, remoteName).DeleteSubKey("SOFTWARE\\ORL\\WinVNC3\\Test");
    
            }
            
            catch(IOException err)
            {
                lblResult.Text = err.GetType().Name + "\n" + err.Message;
                return;
            }
            
            // Print the values.
        
            lblResult.Text = "\nEr is " + softwareKey.ValueCount.ToString() + " waarde voor " + softwareKey.Name;
            foreach(string valueName in softwareKey.GetValueNames())
        
            {
                lblResult.Text += "\n\n\t" + valueName + ": " + softwareKey.GetValue(valueName).ToString();
                lblResult.Text += "\n\nNieuwe Subkey gemaakt: " + softwareKey2.Name;

            }
            softwareKey.Close();
        }



Nou kan ik wel een subkey maken met deze code, ook bekijken maar ik kan de aangemaakte subkey niet verwijderen.

Ik krijg de volgende foutmelding: Cannot implicitly convert type 'void' to 'Microsoft.Win32.RegistryKey'

  • whoami
  • Registratie: December 2000
  • Nu online
Foutmelding begrijpend lezen...
Dit is een compiler error; kijk op welke lijn je die fout krijgt, kijk wat het return type is van de method die je aanroept (void), en zie dat je de returnwaarde (die method returned niets) aan een instance van het type RegistryKey wilt toekennen.
(De method DeleteSubKey returned void, en je hebt één lang statement waar je een key opent (die returned wel een REgisteryKey), je roept meteen delete aan , tot zover ok, maar je wilt de return waarde van die Delete method in softwareKey3 steken.

https://fgheysels.github.io/


  • STIMPPYYY
  • Registratie: December 2001
  • Laatst online: 09:05
(RegistryHive.LocalMachine, remoteName).DeleteSubKey

Daar wordt de fout aangeroepen, komt er niet uit, heb aantal dingetjes geprobeerd. Zal morgen eens verder stoeien.

  • whoami
  • Registratie: December 2000
  • Nu online
Hier gaat het fout:
code:
1
2
softwareKey3 = RegistryKey.OpenRemoteBaseKey
                (RegistryHive.LocalMachine, remoteName).DeleteSubKey("SOFTWARE\\ORL\\WinVNC3\\Test");

Dit is één statement.
Je opent een key, delete de geopende key, en wil de return waarde van DeleteSubKey toekennen aan softwareKey3.
Dit gaat dan weer wel compileren:
code:
1
2
RegistryKey.OpenRemoteBaseKey
                (RegistryHive.LocalMachine, remoteName).DeleteSubKey("SOFTWARE\\ORL\\WinVNC3\\Test");

Of dit:
code:
1
2
3
softwareKey3 = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, remoteName);

softwareKey3.DeleteSubKey("SOFTWARE\\ORL\\WinVNC3\\Test");

https://fgheysels.github.io/


  • STIMPPYYY
  • Registratie: December 2001
  • Laatst online: 09:05
Nou krijg ik een melding, opeens: use of unassinged local variable softwareKey, softwareKey2, softwareKey3

Snap ik niet, want ik heb ze boven toch gedeclareerd met RegistryKey :?

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 05-08 09:21

Not Pingu

Dumbass ex machina

Declareren is niet hetzelfde als assignen. De assignment gebeurt in je try block en tja, als daar iets fout gaat, is je variabele dus unassigned op het moment dat je em daaronder wilt uitlezen. Zet dus je UI code ook in je try block of geef je variabelen meteen standaardwaardes mee bij het declareren.

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Not Pingu schreef op donderdag 13 september 2007 @ 11:03:
Declareren is niet hetzelfde als assignen. De assignment gebeurt in je try block en tja, als daar iets fout gaat, is je variabele dus unassigned op het moment dat je em daaronder wilt uitlezen. Zet dus je UI code ook in je try block of geef je variabelen meteen standaardwaardes mee bij het declareren.
Dat snap ik eigenlijk ook niet zo goed. Waarom wordt het eerste voorbeeld niet geaccepteerd door te compiler (x not assigned), maar het tweede voorbeeld wel? Beide voorbeelden hebben niet zoveel kans om mis te gaan.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
int x;

try
{
Iets met een mogelijke exception...
x = 3;
}
catch
{
 asdf...
}

return x;


code:
1
2
3
4
5
6
7
int x;

Iets met een mogelijke exception...

x = 3;

return x;

[ Voor 15% gewijzigd door Verwijderd op 13-09-2007 11:35 ]


  • STIMPPYYY
  • Registratie: December 2001
  • Laatst online: 09:05
Waarmee moet ik softwareKey/2/3 dan assingnen?

Als ik de UI in een try/catch block zet begint de compiler weer te zeuren dat hij ValueName niet bestaat binnen de class of namespace.

Zodra ik de hele code afdrukken op Form1 weglaat werkt het programma wel gewoon goed en gooit hij Test direct weg na het aanmaken (of een andere hand aangemaakte subkey)

[ Voor 5% gewijzigd door STIMPPYYY op 13-09-2007 11:49 ]


  • whoami
  • Registratie: December 2000
  • Nu online
Verwijderd schreef op donderdag 13 september 2007 @ 11:32:
[...]


Dat snap ik eigenlijk ook niet zo goed. Waarom wordt het eerste voorbeeld niet geaccepteerd door te compiler (x not assigned), maar het tweede voorbeeld wel? Beide voorbeelden hebben niet zoveel kans om mis te gaan.
Als je dit schrijft:
code:
1
2
3
4
5
6
7
8
9
10
SomeClass o;
try
{
   o = new SomeClass();
}
catch
{
    throw;
}
o.DoIt();
Ga je ook die warning/error krijgen. Op de regel o.DoIt() ben je nl. niet zeker dat o wel ge-assigned is.
Je kan dit oplossen door dit te doen:
code:
1
2
3
4
5
6
7
8
9
10
SomeClass o = null;
try
{
   o = new SomeClass();
}
catch
{
    throw;
}
o.DoIt();
Nu ga je die compiler error (of was het een warning) niet meer krijgen.
Echter, nu kan je wel nog een AccessViolation krijgen; het kan nl. zijn dat de assignment van o niet lukte, en o dus nog steeds null bevat.

https://fgheysels.github.io/

Pagina: 1