.NETの「文字列」と「文字列」の違いはどれですか?


15

.NET Frameworkでは、少なくともC#言語では、文字列型の2つの「バージョン」があります。

  • "ストリング"
  • "ストリング"

それらは互換性があるように見えますが、本当にそうですか?それらが互換性がない場合、一般的に、他の代わりに一方を使用する方が良いでしょうか?


1
この質問に似ています:stackoverflow.com/q/6000517/6504
Agent_9191

2
様式的には、型を参照するときは小文字バージョンを使用し、System.Stringの静的メソッドを呼び出すときは大文字バージョンを使用する傾向があります。
ジョエルミューラー


2
stringには存在せず.net、C#にのみ存在します。
CodesInChaos

1
これはStack Overflowにもう少し適しているかもしれませんが、プログラマーにとって完全にトピックから外れているとは思いません。StackOverflowには既に少なくとも1つの重複があるため、これを移行してもあまり意味がありません。したがって、移行するためにフラグを立てる/投票を閉じるのを停止してください。これを閉じる必要があると思う場合は、それはクールですが、移行しないで閉じる必要があります。
ヤニス

回答:


30

まあMSDNによると

stringは、.NET FrameworkのStringのエイリアスです。

ここで、「文字列」は実際System.Stringです。

それらは互換性があり、どちらを使用するか、いつどこで使用するかに違いはありません。

ただし、どちらを使用したかと一致している方が良いでしょう。


何らかの理由で、文字列が値型の文字列のクラスラッパーであり、これがボクシングのアイデアにつながるということが頭にありました...私はここで完全に間違っていますか?
アーロンアノディード

1
@GabrielいいえString(したがってstringエイリアスによる)は参照型です。
クリスハーパー

@Gabriel:バイト対バイトのようなものでJavaはそれをしませんか?
whatsisname

Double vs double、および他のデータ型にも同じことが当てはまりますか?
ギャビンコーツ

1
@AaronAnodideこれはJavaの慣習だと思います。おそらくあなたが聞いたことがあるでしょう。
KChaloux 14年

20

指摘したように、それらは同じものでstringあり、単にのエイリアスStringです。

価値のあるものについては、string変数、プロパティ、戻り値、およびパラメーターの型を宣言するために使用します。-これは、他のシステム・タイプの使用と一致してintboolvarなど(ただし、Int32Booleanも正しいです)。

またはのStringようなStringクラスの静的メソッドを使用するときに使用します。メソッドはクラスに属し、他の静的メソッドを使用する方法と一貫性があるため、これはより理にかなっていると思います。String.Split()String.IsNullOrEmpty()


私たちは職場でもこの規則を使用していますが、私はそれを気に入っています。私の脳が自動的に接続します。
SBI

4

小文字を使用することをお勧めしstringます。大文字は、Stringそれがインポートの名前空間で見つかった文字列の名前の最初のクラス...一般的に使用されますSystem.String。代わりに独自のStringクラスを使用することもできます。


3
同じ名前の2つの異なるインポートされたタイプがあり、ネームスペース修飾なしでその名前を使用すると、エラーが発生します。
-svick

trick Stringして働くことは可能ですが、trickすることは決してできませんstring
ブライアンベッチャー

それでも、私はそれを使用する十分な理由だとは思わないstring
svick

5
他のすべてが十分な理由ではなく同一である場合、「1つは壊れる」対「1つは決して壊れない」のはどうですか。
ブライアンベッチャー

4

string は単なるC#キーワードであり、 System.String

..butそれがキーワードだ、あなたの構文は、エディタ/ IDEは、キーワードの色で表示されます、intと同じ、ダブル、もし、そうでない、などの文体着色としては、キーワードではなく、使用することを好むかもしれSystem.Stringタイプを(あるいは単にString後完了しましたusing System;)。

これは、しかしニッチ点であるもののとしてboolcharintdoubleおよびstringシステム・タイプのすべてのキーワードの別名であり、stringそれは参照型であり、他の値型であるように、奇数ワンアウトです。


4
objectあまりにも、参照型のキーワード別名である
nikie

ああ、私はそのことをすべて忘れてしまった-リマインダーをありがとう。
JBRウィルキンソン

2

stringはのエイリアスに過ぎず、String最終的には同じです。

私は、一般的に使用していますがあなたは、あなたが好む方使用することができstring、私は(に似た多くのプリミティブデータ型のようにそれを使用して計画していたときintfloatまたはbool)およびStringIは、オブジェクト/クラスとしてそれを使用して計画していたとき。例えば:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

上記の場合、fooテキストを(事実上プリミティブとして)格納するためだけに使用することを計画しているためstring、ただし、電話String.isNullOrWhitespace(string)するときはを使用しますString。通常、クラス名の最初の文字は大文字(String)で、プリミティブの最初の文字(などint)は大文字ではないため、これを行います。


-2

文字列は名前空間System.Stringで使用され、文字列はC#コンパイラ仕様で使用され、さらにSystem.Stringは参照型の値です。System object、リテラルのみの文字列を扱うことをお勧めします。システムとシステムは両方とも機能します。

string TC = new System.String('/', 5);

文字列は、比較、同等、その他の目的にも使用されます。


4
これは、以前の6つの回答よりも実質的なものを提供していないようです
-gnat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.