18

私はVB6からVB.Net(VS 2010)に移行しており、後者についての広範な理解ではなく、基本的な理解を持っています。私は明らかにかなりのコードを持っています...過去のバージョンのVSのアップグレードウィザードがコードをコメントアウトして言った可能性があることを考えると、「ポート」がより適切である場合は「アップグレード」という言葉を使用することを躊躇します「ねえ、最初からやり直してみませんか?」

私が持っている1つの手順では、Len()関数を使用して文字列変数の長さを決定しました。これはVB.Netでも機能しますが(実際にはStrings.Lenメソッドの呼び出しだと思いますが)、他の方法は.Length変数のプロパティをクエリすることです。

問題は、どちらを使用するのか、そしてその理由です。関連するMSDNページを調べましたが、メソッド/プロパティが存在することがわかりました。特に多数の呼び出しのループが含まれる可能性がある場合は、パフォーマンスの問題については何も言われていません。

それで、私の質問は、あるアプローチを他のアプローチよりも使用することのテストされ確認された利点を誰かが知っているかどうか、またはそれが単に個人的な好みの問題であるかどうかです。スタックオーバーフローのガイドラインを考えると、特定の答えがあるかどうかを確認したいのはこの1つの問題だけですが、進行中に遭遇する可能性のある同様の状況に関するポインタもありがたいです。

4

6 に答える 6

21

VB.NETを使用しているので、それStringsNothing明示的にチェックしない限り、を含むほとんどのVBメソッドはそれをieLenと同じように扱います。String.Empty""

Reflectorを使用するLenと、nullチェックとして実装され、に戻るか、0そうNothingでなければ戻る.Lengthことがわかります。JITterはコールをインライン化する可能性があります。

したがって、他のVBメソッドを使用している場合は、そうLenでないことがわかっているStringか、どこでもNothingチェックしていない限り、それも使用することをお勧めします。Nothing

于 2012-08-20T14:50:46.733 に答える
6

だからこれによる

もう1つの古典的なBASIC関数であるLenは、文字列の長さを返します。System.Stringには、同じ情報を提供するLengthプロパティがあります。一方はもう一方よりも優れていますか?

パフォーマンス面では、これら2つの関数は、1000回の反復でほとんど違いがありません。この場合、どちらか一方を優先する理由はないようです。さらに、機能的な違いはありません。.NET文字列をオブジェクトとして考えることを奨励するため、VB関数ではなくプロパティ値を使用することに少し偏っています。ただし、基本的には、個人的な好みにすぎません。

あなたが彼らの言葉を信頼するなら、あなたの答えがあります。それ以外の場合は、テストをコーディングして反復することで、最終的な答えが得られるはずです。

于 2012-08-20T04:47:06.650 に答える
4

メソッドの詳細についてはわかりませんがLen()(私の選択した言語はC#です)、間違いなくLengthプロパティを使用すると思います。 LengthSystem.Stringクラスのメンバーですが、そうでLen()はありません。

私の推測では、それはプロパティLen()の上にある単なるVBシムです。Length誰かがおそらくLen()、VBの観点から、使用はより慣用的であるという議論をすることができます。言語によって提供されるという理由だけで別のメカニズムを使用するのではなく、クラスに組み込まれているプロパティを使用したいと思います。

于 2012-08-20T04:40:35.560 に答える
3

このLenメソッドは、古いVB6(およびそれ以前)の非.NETコードとの下位互換性のために提供されています。それを使用することに技術的に問題はありません。それはうまくいくでしょう、そしてそれでも同じように。ただし、可能な限り、新しい.NETの方法を使用することをお勧めします。ただし、「。NETの考え方」をさらに理解する以外に、使用することの唯一の具体的な利点はString.Length、将来、コードを他の.NET言語に簡単に移植できることです。

于 2012-08-20T11:55:30.777 に答える
2

@Andrewの投稿に加えて、Len()はVisual Basicランタイムライブラリの文字列関数であり、asは.netFrameworkAPILengthのクラスのプロパティです。System.String

于 2012-08-20T04:46:59.640 に答える
1

最近、Len()関数を使用していた古いVB.Netコードで問題が発生しました。プロジェクトをコアにアップグレードしました。コアは古いVB.netdllファイルを参照しており、Len()関数を使用していました。実行時の互換性エラーが発生しました-メソッドが見つかりません:'Int32 Microsoft.VisualBasic.Strings.Len(System.String)'

Coreが廃止した古い関数をすべて変更する必要があります。そこで、Steven Doggartが提案したように、Len()ではなくString.Lengthを使用します。

于 2019-01-11T21:32:08.173 に答える