質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

5回答

15971閲覧

C#のstringをnewしてから文字列指定はできますか?

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/06/04 13:50

タイトルがわかりにくくてすみません。
C#の学習者です。オブジェクトについて学習しているときに気になることがあったので質問させていただきます。

C#では、配列はオブジェクトの一種ですよね。例えば、整数型の配列arrayを作る場合
int[] array = new int[3] {1, 2, 4};
と書きます。また、この文は
int[] array = {1, 2, 4};
と書くこともできます。

そこで思ったのですが、stringも配列である以上、
string str = "abc";
という文は
string str = new string[1] {"abc"};
のような文を書くこともできると思うのですが、エラー文が出てしまいます。コードとエラー文を以下に載せます。

using System; public class Test { public static void Main() { string str = new string[1]{"abc"}; Console.WriteLine(str); } }

prog.cs(7,22): error CS0029: Cannot implicitly convert type string[]' to string'
Compilation failed: 1 error(s), 0 warnings

[]内の数字を大きくしてみたり、0にしてみたりといろいろ試してみましたが、解決しませんでした。
エラー文からわかるように、stringではなくstring[]を作ってしまっているようなのですが、stringをnewすることはできないのでしょうか?
わざわざこのように書く必要がないことはわかっていますが、どうしても気になったので質問させてもらいました。回答よろしくお願いします。

補足
補足になっているかわかりませんが、
string[] str = new string[] {"abc","de"};
と書くとエラーが出ないことは確認しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

C の文字列は配列ですが、C# の string は配列ではありません。
配列のような形でアクセスできるのはインデクサーです。
インデクサー (C# プログラミング ガイド)

string のコンストラクタは次を見てください。
String コンストラクター

投稿2017/06/04 13:58

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/04 22:37

回答ありがとうございます。 もともとCを学んでいたので、混乱したのだと思います。 stringはintやdoubleと同じようにコンストラクタであるという認識で間違いないでしょうか?
Zuishin

2017/06/05 00:50

string は型です。型がコンストラクタを持っています。
guest

0

stringは一旦作られたら状態の変化しないオブジェクトとして設計されていますので、別な文字列は別なオブジェクトとして生成することになるでしょう。

値型と参照型とミュータブルとイミュータブルと - Qiita

可変な文字列としてはStringBuilderが用意されております。

投稿2017/06/04 22:17

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは。

string str = new string[1]{"abc"};

構文的に、左辺はstring型、右辺はstring[]型ですね。
つまり、型が異なるため代入できないということです。
エラー・メッセージもstring[]をstringへ変換できないと言ってます。

なお、インデクスサは配列とは異なります
C#のstring型は[]演算子(インデクサ)を実装しているので配列っぽくみえます。それで惑わされたのだろうと思います。

投稿2017/06/04 16:58

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/06/04 22:41

回答ありがとうございます。 string型は、intなど他のコンストラクタが持っている機能に加えて、インデクサを実装しているので、配列のように扱うこともできるということでしょうか?
hidori

2017/06/05 02:00

C# の string 型は「配列と似たような操作を行うことが出来る」だけであって、配列ではありません。 あくまで「string 型」です。C 言語とは異なります。
guest

0

Cとは違い、C#のstringは配列ではないということはすでに述べられていますが、そもそもCでもchar配列なので、charの二次元配列になってしまうと考えるととっつきやすいかもしれません。

正確にはstringはchar[]ではないですが、

int[] intArray = {1, 2, 4};
int i = intArray.First();//1が代入される

string str = "abc";
char c = str.First();//aが代入される

のように、char[]と考えていてもそんなに不自由ないと個人的には思います。

投稿2017/06/04 14:38

kuniatsu

総合スコア141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

stringも配列である以上

C# で string は配列ではありません。添字でアクセスできるようにインデクサプロパティが配列っぽく見せているだけです。

stringをnewすることはできないのでしょうか?

stringクラスのリファレンスを見ましょう。char の配列を渡すことで初期化できたり、他にも色々なバリエーションがあることがわかるはずです。

投稿2017/06/04 14:00

koko_u

総合スコア936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問