Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Intressant...

Postades av 2002-10-22 13:30:27 - Johan Bovin, i forum vb.net, Tråden har 4 Kommentarer och lästs av 1161 personer

Testade lite med skillnad mellan C# och VB.Net och skrev då följande kod som fick ödesdigra testresultat:
Dim j As Integer = 100000
Dim list(,) As String = New String(10, j) {}
Dim tot As Double = 0

Dim k As Integer
For k = 0 To 10 - 1 Step k + 1
Dim i As Integer
For i = 0 To j - 1 Step i + 1
list(k, i) = k.ToString() + i.ToString()
Next

Next
Det intressanta är att i bara blir 0 i första For-loopen sedan behåller den sitt värde...Nåja, intressant och intressant men om man är van att skriva i språk där en For-loop är ett block så kan ju detta vara ett hål att trilla ner i.
Lärdom skriv i så fall: Dim i As Integer=0 eller Dimma den högst upp och sätt i=0 i varje runda....

/Johan


Svara

Sv: Intressant...

Postades av 2002-10-22 19:14:32 - Mattias Sjögren

>Det intressanta är att i bara blir 0 i första For-loopen sedan behåller den sitt värde...

Att i behåller sitt värde är egentligen inget problem, det är bara indirekt orsak till det som händer. Det egentliga problemet är att du använder den något udda konstruktionen

Step i + 1

för att sätta steglängden. Eftersom i efter första loopen är 9 så blir steglängden 10 i fortsättningen och därför körs loopen bara med i = 0.


>Nåja, intressant och intressant men om man är van att skriva i språk där en For-loop är ett block

For...Next är ett block i VB.NET också. Men block begränsar bara åtkomsten till en variabel (du kan inte använda i utanför yttre For loopen), inte livslängden. Detsamma gäller för övrigt C#.

I v1.1 har kan man begränsa åtkomsten till loopvariabeln till det For(Each) block den används i med syntaxen

For i As Integer = 0 To j - 1


>Dimma den högst upp och sätt i=0 i varje runda....

Du behöver inte nödvändigtvis flytta deklarationen, att sätta tillbaka till 0 skulle räcka.


MS


Svara

Sv: Intressant...

Postades av 2002-10-22 21:41:10 - Johan Bovin

>>Men block begränsar bara åtkomsten till en variabel (du kan inte använda i utanför yttre For loopen), inte livslängden. Detsamma gäller för övrigt C#.

är du helt säker på detta, koden som jag körde i C# ser ut på exakt samma sätt...rent strukturmässigt men där initieras variablen till 0 vilket den uppenbarligen inte gör i VB.Net. Alltså när jag testar i andra gången har den redan maxvärdet (100000) i VB.Net men inte i C#...
Hur blir i=9 i första for-loopen?


----
Körde lit test på morgonen och mina farhågor besannades. Följande kod körs i C#:
int j=100000;
string[,] list=new string[10,j];


int k=0;
for(;k<10;k++)
{

int i;

for(i=0;i<j;i++)
{
list[k,i]=k.ToString() + i.ToString();
}
Console.Out.WriteLine(i.ToString());

}

Console.In.ReadLine();

}
resultatet blir:
100000
100000
100000
100000
100000
etc...
Fölajnde kod körs i VB.Net:
Dim j As Integer = 100000
Dim list(,) As String = New String(10, j) {}

Dim k As Integer
For k = 0 To 10 - 1 Step k + 1
Dim i As Integer
For i = 0 To j - 1 Step i + 1
list(k, i) = k.ToString() + i.ToString()
Next
Console.Out.WriteLine(i.ToString())

Next
Console.In.ReadLine()
vilket gav resultatet:
100000
100001
100002
100003
etc..
---EDIT 08:51------
Fast nu har jag tänkt lite och skillnaden ligger förmodligen i att VB.Net har sin for sats deklaration som i=0 To X vilket alltså då borde motsvaras av for(;i<x;i++) i C#...dvs den sätter inte i=0 första gången...eller???
/Johan
För övrigt var koden genererad av en C# --> VB.Net konverterare så jag tar inget ansvar för den exakta översättningen




Svara

Sv: Intressant...

Postades av 2002-10-23 22:23:19 - Mattias Sjögren

>är du helt säker på detta

Ja


>men där initieras variablen till 0 vilket den uppenbarligen inte gör i VB.Net.

Joo, det gör den även i VB.NET. Som jag försökte säga tidigare så är problemet inte initieringen, utan att steglängden du anger beror på nuvarande värdet på i.


>Alltså när jag testar i andra gången har den redan maxvärdet (100000) i VB.Net men inte i C#...

Just det. I VB.NET sker utvärderingen av steglängdsuttrycket (i + 1) innan i på nytt tilldelas startvärdet för loopen. Därför blir steglängden för lång andra rundan.


>Hur blir i=9 i första for-loopen?

Oops. Borde sagt att den blir (j-1) efter första loopen. Jag minskade i till 10 för att få lite rimligare utskrifter att glo på, därav nian.


>För övrigt var koden genererad av en C# --> VB.Net konverterare så jag tar inget ansvar för den exakta översättningen

Jaha, det var ju ännu en utmärkt anledning att inte förlita sig på sådana. Den här gör ju uppenbarligen ett rätt dåligt jobb. Bättre att lära sig språken ordentligt själv, och göra eventuell konvertering manuellt.


MS


Svara

Sv: Intressant...

Postades av 2002-10-24 08:04:34 - Johan Bovin

hehe..jaja, där ser man...Tur att man inte pysslar med VB.Net så mycket mao...
Jag trodde att Step i+1 egentligen var en onödig grej att skriva ut eftersom den körde det "by default".Jaja, man lär sig något nytt varje dag och tur är väl det.
Tack MS för svaren iallafall. Trots att jag tvivlade..

/Johan


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 565
27 958
271 741
444
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies
Expand
next previous
Close

Previous

0/0

Next