J'ai un code VB6 qui doit être migré vers VB.NET et je voulais me renseigner sur cette ligne de code et voir s'il existe un moyen de le mettre en œuvre dans .NET
Dim strChar1 As String * 1
5 Réponses :
c'est appelé une chaîne "longueur fixe". Il n'y a pas d'équivalent exact dans vb.net.
edit forte>: Eh bien, ok, il y a VBFixedStringAttribute strong>, mais je suis sûr que cela existe uniquement pour que les outils de migration automatisés puissent convertir plus facilement le code VB6 en VB.NET pour vous, et ce n'est pas vraiment le ". façon "de faire des choses. Voir également les avertissements de l'article pour plus de détails sur la raison pour laquelle cela n'est toujours pas exactement la même chose qu'une chaîne de longueur fixe dans VB6. P> blockQquote>
Généralement, les chaînes de longueur fixe ne sont utilisées que dans VB6 si vous lisez des enregistrements de taille fixe à partir d'un fichier ou sur le réseau (c.-à-d. Les en-têtes d'analyse dans un cadre de protocole). P>
Par exemple, vous pourriez avoir un fichier contenant un ensemble d'enregistrements de longueur fixe qui ont tous le format
(entier, 1-caractère-string, double) strong>, que vous pourriez représenter dans VB6 en tant qu'utilisateur Type défini: p> xxx pré> de cette façon, le code VB6 qui se lit à partir des enregistrements contenant des fichiers de ce format peut lire chaque enregistrement de taille fixe stocké dans le fichier, et en particulier, Il ne sera lu que 1 octet pour
asingLecharacter code>. Sans le
* 1 code>, VB6 n'aurait aucune idée du nombre de caractères à lire depuis le fichier, car une chaîne code> code> peut normalement avoir un nombre de caractères. P>
Dans VB.net, vous pouvez faire l'une des opérations suivantes, en fonction de vos besoins: p>
Si la longueur est importante (c'est-à-dire que vous devez lire exactement un octet de certaines sources de données, par exemple), envisagez d'utiliser un tableau, tel que P>
DIM asfinlebyeArray (1) en tant qu' octet code> p> li>
Alternativement, vous pouvez utiliser l'un des
Stream strong> classes. En particulier, si vous lisez des données à partir d'une prise réseau ou d'un fichier, envisagez d'utiliser Networkstream strong> ou filtream strong>, respectivement. Un flux strong> est destiné à un accès d'octet-forfyte (c'est-à-dire un accès binaire brut). streamReader strong> est un élément associé La classe qui simplifie la lecture de données lorsqu'elle est basée sur le texte, de sorte que cela puisse être bon si vous lisez un fichier texte, par exemple. Sinon (si vous traitez avec des données binaires), collez-vous avec l'un des classes forts> strong>. P> li> Si la longueur n'a pas d'importance, vous pouvez simplement utiliser une chaîne "normale"
code>. C'est-à-dire: p>
DIM ANORMALSRING AS String CODE> P> li> ul>
Quelle réponse est "correct" dépend vraiment de la raison pour laquelle elle a été déclarée dans le code VB6 d'origine. P> P>
Voir comme vous faites une migration VB6, j'envisagerai certainement Comme mentionné ailleurs vbfixedstringattribute code> ainsi que les autres options répertoriées par Mike Spross, mais dans ce cas, car c'est un seul caractère, Un
Char code> peut être une option dans ce cas aussi. P>
vbfixedstring code> est uniquement reconnu par le
Obtenir code> et
mettre code> VB I / O API. Donc, la meilleure solution (autre que la réécriture de votre code qui fait référence à la "chaîne de longueur fixe") consiste à écrire votre propre équivalent de
microsoft.visalbasic.compatibility.vb6.fixedlengthstring code>. Voir Cette réponse pour plus de détails. P>
Char est certainement l'équivalent le plus proche.
@Derek: si char code> est équivalent dépend du contexte. Dans VB6, les chaînes sont stockées comme unicode, mais si vous lisez ou écrivez un fichier, une chaîne
1 code> est traitée comme un seul octet (8 bits), pas comme un caractère (16 bits), Même si vous mettez un caractère unicode dans la chaîne. VB6 convertit également automatiquement les paramètres de chaîne en ASCII lorsque vous appelez des fonctions externes (I.E. Appels d'API Windows) déclarés avec un paramètre code> de chaîne code>. Sur cette note, le type de données code> de VB.NET CODE> (suggéré dans ma réponse) n'est pas techniquement équivalent pour la même raison. Cela dépend de ce que fait l'OP avec elle.
Les chaînes de longueur fixe ont été obsolètes dans VB.NET car il existe plusieurs meilleures options.
Étant donné que votre chaîne de longueur fixe n'est qu'un caractère long, vous pouvez utiliser le type de caractère dans ce cas, comme marque suggérée. < / p>
vbfixedstringattribute classe p>
Cette question a été répondue il y a 7 ans. Si vous pensez que votre réponse est mieux comparée à la réponse acceptée, veuillez ajouter des informations supplémentaires ou une explication.
Je n'ai plus d'informations sur la définition de la variable à la chaîne de longueur fixe.
Bien que cette question ait été posée il y a longtemps, vb.net dispose d'une chaîne de longueur fixe autochtone -
Votre réponse pourrait être améliorée avec des informations justificatives supplémentaires. S'il vous plaît Modifier pour ajouter des détails supplémentaires, tels que des citations ou une documentation, de sorte que d'autres puissent confirmer que votre réponse est correcte. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide .
Pour une documentation sur VBFixedarray Comparer: Docs .microsoft.com / fr-US / DotNet / API / ...
Ce que vous avez il y a une chaîne de longueur fixe. Comment déclarer un dans vb.net est discuté ici < / a>.
@Jay: J'ai vu cela aussi, mais personnellement, j'y écarais de vbfixedstringattribute b>. C'est l'une des nombreuses choses de l'espace de noms Microsoft.Visualbasic B> un report de VB6 pour faciliter la conversion de VB.NET lorsque .NET est sorti, mais je suis presque toujours préférable d'éviter la plupart des trucs dans cet espace de noms et optent à la place de la fonctionnalité "standard" équivalente "standard". Je veux dire, ils ont même gardé l'ancien modèle de manutention d'erreur VB6 avec
sur erreur code>,
goto code> et
reprend code>, même si des exceptions sont les exceptions (et plus puissant) moyen de gérer les erreurs de code .NET ;-)
@MIKE - Je n'ai pas vraiment examiné la classe VBFixedstringattribute pour déterminer si l'utilisation est une mauvaise idée ou non, mais je crois que cette question est une dupe de celle que j'ai liée. Je pense aussi que votre réponse est meilleure que celle trouvée là-bas, donc +1 à vous. (Et bien sûr, je suis d'accord avec vous que l'utilisation de l'ancien style de traitement des erreurs du VB6 est médiocre dans une application VB.net!)
@Mike Pourquoi éviter cet espace de noms? C'est juste un .NET Assembly, comme tout autre! Cela fait partie de VB et il n'y a aucune raison de ne pas l'utiliser. Ça ne va pas disparaître. Maintenant, l'assemblage Microsoft.VisualBasic.compatibilité est à éviter, cependant.
@Chris: True,
Microsoft.VisualBasic.chability code> est beaucoup pire, mais le
Microsoft.VisualBasic code> Espace de noms peut provoquer des maux de tête. Une partie du problème est qu'elle est conçue pour fonctionner de manière aussi semblable à VB6 qu'il devient déroutant lorsqu'il ne fonctionne pas réellement de la même manière. Par exemple, ils ont même rétabli la plupart des fonctions de date et de temps VB6 (comme
datestériennes code> et amis), même si le framework .NET dispose déjà de classes toutes ces choses. Un autre exemple: il est confus lorsque la moitié du code utilise l'ancien style
errrobject code> et la moitié utilise des exceptions .NET, par exemple.
@Chris: Cela dépend du programmeur bien sûr, mais du moins dans mon expérience vb.net tente de refléter le temps d'exécution VB6 et d'encourager le même style de programmation vient de conduire à la confusion pour les développeurs ici, et il les a également encouragés à ne pas explorer la reste de .net ou pour apprendre à écrire un code orienté objet, car ils étaient satisfaits d'utiliser toutes les classes "globales" et les fonctions VB.NET fournies, qui ne sont vraiment que des wrappers autour des classes de Native .NET. YMMV, bien sûr.
Connexe: Comment déclarer une chaîne de longueur fixe dans vb.net? (uniquement liée car cela a le cas particulier d'être une seule chaîne de caractères.)