vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Fehler in Mono bei GetUpperBound(0) ? 
Autor: Maywood
Datum: 12.01.06 20:06

>> Weil ich keine Lust habe C# zu lernen und einige Dinge anscheinend anders sind.

Nein. Du musst doch nicht extra C# lernen! Ich wollte nur damit sagen, dass C# std.mäßig nicht das VB-Assembly benutzt.
Du kannst in VB.Net genauso gut auf diese VB-Funktionien verzichten. Einfach den Namespace nicht mehr importieren und den Verweis entfernen.

Es gibt - wie schon gesagt - für fast jede VB-Funkt. eine entsprechende C#-Methode/Klasse. Nur bspw. InputBox() usw. gibt es nicht wirklich.

Der VB Compiler (vbc) erzeugt übrigens ein kmpl. anderen MSIL Code wenn du solche VB-Methoden benutzt.

Bsp. gefällig?

Lade Dir einfach mal die Trial von Dis# (suche nach DisSharp) herunter oder benutze Ilasm, und schau Dir damit jeweils den unterschiedlichen MSIL-Code der beiden C#/VB Assemblies an:

1.)

#C-Code:
using System;
namespace CSharpSplitTest1
{
	public class MainClass
	{
		public static void Main()
		{
			Console.WriteLine ("Hi!");
			string [] s = "1;2;3".Split(new char[] {';'});
			foreach (string _s in s)
			{
				Console.WriteLine (_s);
			}
			Console.ReadLine();
		}
	}
}
daraus wird (nur void Main):
public static void Main()
{
    locals:
        V_0: string[] 
        V_1: string 
        V_2: char[] 
        V_3: string[] 
        V_4: int 
 
    ldstr       "Hi!"
    call        void Console.WriteLine(string)
    ldstr       "1;2;3"
    ldc.i4.1
    newarr      char
    stloc.2
    ldloc.2
    ldc.i4.0
    ldc.i4.s    59
    stelem.i2
    ldloc.2
    callvirt    string[] String.Split(char[])
    stloc.0
    ldloc.0
    stloc.3
    ldc.i4.0
    stloc.s     V_4
    br.s        label_2
label_1:
    ldloc.3
    ldloc.s     V_4
    ldelem.ref
    stloc.1
    ldloc.1
    call        void Console.WriteLine(string)
    ldloc.s     V_4
    ldc.i4.1
    add
    stloc.s     V_4
label_2:
    ldloc.s     V_4
    ldloc.3
    ldlen
    conv.i4
    blt.s       label_1
    call        string Console.ReadLine()
    pop
    ret
}
2.)

Visual Basic .Net:
Public Class MainClass
    Public Shared Sub Main()
        Console.WriteLine("Hi!")
        Dim s() As String = Split("1;2;3", ";")
        For Each _s As String In s
            Console.Write(_s)
        Next
        Console.ReadLine()
    End Sub
End Class
hier sieht das ganze dann etwas anders aus (ebenfalls nur die Sub Main):
public static void Main()
{
    locals:
        V_0: string[] 
        V_1: string 
        V_2: int 
        V_3: string[] 
 
    ldstr       "Hi!"
    call        void Console.WriteLine(string)
    ldstr       "1;2;3"
    ldstr       ";"
    ldc.i4.m1
    ldc.i4.0
    call        string[] Strings.Split(string, string, int, CompareMethod)
    stloc.0
    ldloc.0
    stloc.3
    ldc.i4.0
    stloc.2
    br.s        label_2
label_1:
    ldloc.3
    ldloc.2
    ldelem.ref
    stloc.1
    ldloc.1
    call        void Console.Write(string)
    ldloc.2
    ldc.i4.1
    add.ovf
    stloc.2
label_2:
    ldloc.2
    ldloc.3
    ldlen
    conv.i4
    blt.s       label_1
    call        string Console.ReadLine()
    pop
    ret
}
Wie man sehen kann, ist der Code (eigenartiger Weise) nicht identisch. Wenn du jetzt ein weiteres VB-Ass. erstellst, welches nicht die VB Split() Methode benutzt, wirst du sehen das der Assembler Code relativ ähnlich/gleich ist.

Split und solche anderen VB-Fkt.en würde ich aus dem o.g. Grund nicht nutzen, da Mono (höchst)wahrscheinlich noch seine Probleme mit den "eigenartigen" MSIL Code hat.

(kann mich aber auch irren)

>> Das ist z.B. nicht das selbe. Wenn ich obere Version nehme, wird bei
>> txtVerknüpfung1.Text = strEinstellungen(1).Substring(1, strEinstellungen(1).Length - 1)
>> das erste Zeichen abgeschnitten,

Ist doch auch klar warum. Der Index beginnt ja auch bei 1, also fehlt logischerweise das erste Zeichen.

>> Ich müßte also alle Programme nach den alten VB Methoden durchsuchen und den gesamten Code danach überprüfen.

Jupp. Theoretisch ja.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Fehler in Mono bei GetUpperBound(0) ?1.182vbtest211.01.06 16:12
Re: Fehler in Mono bei GetUpperBound(0) ?896Maywood11.01.06 19:02
Re: Fehler in Mono bei GetUpperBound(0) ?837vbtest212.01.06 10:08
Re: Fehler in Mono bei GetUpperBound(0) ?801vbtest212.01.06 10:55
Re: Fehler in Mono bei GetUpperBound(0) ?932Maywood12.01.06 15:25
Re: Fehler in Mono bei GetUpperBound(0) ?1.042vbtest212.01.06 16:06
Re: Fehler in Mono bei GetUpperBound(0) ?840Maywood12.01.06 20:06

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel