folgendes entstund aus einer Privaten Konversation mit SeriTools. Ich hatte gefragt, ob er die Auflistung Böse Funktionen nicht auch nach Themen gruppiert darstellen möge, und das hier ist quasi ein Exposee.
Habich in Off-Topic gemacht, weil per PM kann man nur 5000 Zeichen, und keine DateiAnhänge.
Die "bösen" Funktionen, bisserl geordnet nach Bereichen:
Habich in Off-Topic gemacht, weil per PM kann man nur 5000 Zeichen, und keine DateiAnhänge.
Die "bösen" Funktionen, bisserl geordnet nach Bereichen:
- keine böse Funktion
(Also eh ich zB. eine Methode selber schreibe, nehme ich schon auch Zeugs aussm VisualBasic-Namespace.)
- AscW() - .NET: bei konstantem Parameter: AscW(), ansonsten: System.Convert.ToInt16()
- AppActivate() - .NET: Leider keine einfache Alternative, da AppActivate() wohl direkt auf die WINAPI zugreift.
- InputBox() - .NET: Eigenen Dialog verwenden, viel mehr Möglichkeiten
- StrReverse() - .NET: selber schreiben (wenn man denn sowas eigenartiges je brauchen täte).
- MsgBox() - .NET: System.Windows.Forms.MessageBox.Show() IMO: ob nu Messagebox oder MsgBox: ist doch eh ziemlich mies vonne Experience her. Also setzt man ein, wos selten gebraucht wird, und der Aufwand eines ordentlichen Dialoges auf später vertagt wern kann.
- CreateObject("Com.Object.Name") - .NET: System.Activator.CreateInstance(System.Type.GetTypeFromProgID("Com.Object.Name"))
- GetObject() - .NET: z.B.: codeproject.com/KB/cs/CSGetObject.aspx
- AscW() - .NET: bei konstantem Parameter: AscW(), ansonsten: System.Convert.ToInt16()
- Auflistungen
- IsArray(), IsDate(), IsDBNull() etc. - .NET: Typvergleich ausführen
- LBound() - .NET: Array.GetLowerBound()
- UBound() - .NET: Array.GetUpperBound()
- ReDim - .NET: Verwendung von AuflistungsKlassen, wie List(Of T)
- ArrayList - .NET: List(Of T)
- Collection (VB6) - .NET: List(Of T) oder Dictionary(Of TKey, TValue)
- IsArray(), IsDate(), IsDBNull() etc. - .NET: Typvergleich ausführen
- Reflection
- CallByName() - .NET: Late Binding ist schlecht! Es würde über System.Refelection gehen.
- SystemTypeName() - .NET: unnötig
- TypeName() - .NET: .GetType.Name/FullName()
- VarType(), VbTypeName() - .NET: unnötig.
- CallByName() - .NET: Late Binding ist schlecht! Es würde über System.Refelection gehen.
- File-Handling
- ChDir() bzw. ChDrive() - .NET: System.IO.Directory.SetCurrentDirectory() bzw. Eigenschaft System.Environment.CurrentDirectory() setzen
- CurDir() - .NET: System.IO.Directory.GetCurrentDirectory() bzw. Eigenschaft System.Environment.CurrentDirectory() auslesen
- Dir() - .NET: System.IO.GetDirectoryInfo() und die dazugehörigen Klassen verwenden.
- File*(), EOF(), FreeFile(), Input(), Loc(), Lock() etc., also Dateizugriff in VB6 - .NET: System.IO-Namespace benutzen
- Kill() - .NET: System.IO.File.Delete()
- MkDir() - .NET: System.IO.Directory.CreateDirectory()
- Rename() - .NET: System.IO.File/Directory.Move()
- RmDir() - .NET: System.IO.Directory.Delete()
- & und annere String-Operationen mit Dateipfaden - .NET: System.IO.Path.Combine und annere Path-Methoden nutzen
- ChDir() bzw. ChDrive() - .NET: System.IO.Directory.SetCurrentDirectory() bzw. Eigenschaft System.Environment.CurrentDirectory() setzen
- Fehlerbehandlung
- On Error GoTo ... - .NET: TryCatch - Konzept verwenden
- ErrorToString() - .NET: TryCatch - Konzept verwenden
- GetException() - .NET: TryCatch - Konzept verwenden
- On Error GoTo ... - .NET: TryCatch - Konzept verwenden
- Strings
- Asc() - .NET: AscW()
- Chr() - .NET: ChrW
- CBool(), CByte(), CChar(), CDate(), CDbl(), CDec(), CInt(), CLng(), CObj(), CSByte(), CShort(), CSng(), CStr(), CUInt(), CULng(), CUShort() - diese Schlüsselworte sind i.a. sehr performant - bei Konstanten werden sie zT. schon vom Compiler ausgewertet und nehmen zur Laufzeit keine Rechenzeit in Anspruch.
sie sind aber nicht dazu konzipiert, um von String zu konvertieren - dafür sind die Parse-Functions des ZielTypen vorgesehen (DateTime.Parse(), Boolean.Parse(), ...). - Format(), Format* - .NET: System.String.Format()
- GetChar() - .NET: deinString(index) bzw. deinString.Char(index)
- InStr() - .NET: String.Contains() bzw. String.IndexOf()
- InStrRev() - .NET: String.LastIndexOf()
- Join() - .NET: String.Join() oder string &= "...", bei vielen Verkettungen ist ein StringBuilder empfehlenswert.
- LCase() - .NET: String.ToLower()
- Left(), Right(), Mid() - .NET: String.Substring()
- Len() - .NET: String.Length()
- LTrim() - .NET: String.TrimStart(Nothing)
- LSet(), RSet(), Space() - .NET: String.PadLeft()/PadRight()
- Oct(), Hex() - .NET: Convert.ToString(value,8) (oktal), Convert.ToString(value,16) (hexadezimal), s.a. Convert.ToString(value,2) (binär)
- Replace() - .NET: String.Replace()
- Split() - .NET: String.Split()
- Str() - .NET: .ToString()
- StrComp() - .NET: String.Compare() / String.CompareTo()
- StrConv(conv) - .NET: im nicht-asiatischen Sprachraum unnötig - einzig mit VbStrConv.ProperCase als Parameter manchmal sinnvoll
- StrDup() - .NET: String.Pad-Left/-Right, oder zB: New String(" "c, 20) erzeugt einen String mit 20 Spaces.
- UCase() - .NET: String.ToUpper()
- Val() - .NET: explizite Typkonvertierung durchführen (z.B. .ToString())
- Asc() - .NET: AscW()
- Sonstige: die Aufzählung versucht nach Wichtigkeit geordnet zu sein
- Date...(), Day(), Hour() etc. - .NET: Die Klassen System.DateTime und System.TimeSpan bieten alle Funktionalität, die man sich zur Behandlung von Zeit-Werten nur wünschen kann - Zeiten-Handling ist im Grunde ein ähnlich komplexer Bereich wie das String-Handling
- Or / And - .NET: OrElse / AndAlso
- IIf() - .NET: If(expression, TruePart, FalsePart) oder If(expression, FalsePart)
- Shell() - .NET: System.Diagnostics.Process.Start()
- Command() - .NET: System.Environment.CommandLine()
- Environ() - .NET: System.Environment.GetEnvironmentVariable()
- *Setting(), GetAllSettings() - .NET: Microsoft.Win32.Registry/RegistryKey benutzen
- Randomize(), Rnd() - .NET: System.Random benutzen.
- Choose(index, variable) - .NET: variable(index) oder (bei manchen Listen o.ä.) variable.Item(index)
- Beep() - .NET: Keine äquivaltente Methode (benutzt WINAPI), außer für Konsolenfenster: System.Console.Beep() - Achtung: Funktioniert nicht auf XP x64/Vista x64, wurde in Windows 7 gelöst.
- DDB() - .NET: Folgende Formel anstatt Parameter benutzen: Depreciation / Period = ((Cost – Salvage) * Factor) / Life
- Filter() - .NET: Keine direkte Entsprechung
- Fix(), Int() - .NET: System.Math.Truncate()
- FV() - .NET: selber berechnen.
- Hex() - .NET: Convert.ToString(value,16)
- IPmt() - .NET: selber berechnen.
- IRR() - .NET: selber berechnen.
- IsNothing() - .NET: If variable Is Nothing Then [...]
- MIRR() - .NET: selber berechnen.
- NPer() - .NET: selber berechnen.
- NPV() - .NET: selber berechnen.
- Pmt(), PPmt(), PV() - .NET: selber berechnen.
- QBColor() - .NET: unnötig.
- Rate() - .NET: selber berechnen.
- RGB() - .NET: Color-Klasse benutzen.
- SLN() - .NET: selber berechnen.
- Switch() - .NET: Switch benutzen bzw. While oder For
- SYD() - .NET: selber berechnen.
- Date...(), Day(), Hour() etc. - .NET: Die Klassen System.DateTime und System.TimeSpan bieten alle Funktionalität, die man sich zur Behandlung von Zeit-Werten nur wünschen kann - Zeiten-Handling ist im Grunde ein ähnlich komplexer Bereich wie das String-Handling
Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „ErfinderDesRades“ ()