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

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

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

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

2478閲覧

文字列を使ってクラスの変数を参照したい

earth545

総合スコア11

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/09/01 12:09

前提・実現したいこと

Unity,C#を使っています。

クラスの中身の変数を文字列で指定して扱いたいです。

通常、「cList.Character1」みたいな形で扱えると思うのですが、Character1という部分を文字列型を使って扱いたいです。
何かいい方法がありますでしょうか。

何卒、ご教授願いたいです。

該当のソースコード

public class CharacterList { public int Character1; public int Character2; public int Character3; } public void Start() { CharacterList cList = new CharacterList(); cList.Character1 = 1; cList.Character2 = 1; cList.Character2 = 0; string str = "Character1"; //文字列を使ってクラスの変数を参照したい cList.str  //←みたいな //↓と同じ結果にしたい cList.Character1 }

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

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

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

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

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

BluOxy

2021/09/01 12:47 編集

> //↓と同じ結果にしたい どういうことかよくわかりませんでした。もう少し詳しく書くと、cList.Character1とソースコードに書いただけではコンパイルエラーになります。ですから、それと同じ結果にしたいというのはよくわかりません。 > cList.str こちらも正直なところよくわかっていませんが、恐らく "Character1" という値がほしいという例示で書いたということで合っているでしょうか
BluOxy

2021/09/01 12:30 編集

フィールドを文字列として取得したいということで良いでしょうか。 cList.Character3 なら "Character3" が取得したいという話だと認識しています。
gentaro

2021/09/01 13:10 編集

リフレクションを使ってできる話ではあるけど、そもそも何を目的にしてそれをやろうとしてるんだろう。 変数名にプログラム上の意味を持たせるのはアンチパターンもいいところだけど、何もわかってない初心者ほどやりたがる印象がある。 なぜそれが必要だと思ったのか、そのやりたいことを実現する方法は他にないのか、という視点で質問すれば、そもそもそんな事をやる必要がない、という結論になりそう。99.99999%ぐらいの確率で。
BluOxy

2021/09/01 13:19

XY問題の可能性は大いにありますね。
TN8001

2021/09/01 14:39

なんで皆さんこういう発想になるんでしょうね? 初心ははるか昔なのでどうにも想像できないのですが^^; teratail内でUnityに限っても、ざっとこれくらいは見つかりました。 [C# - Unity C# 変数名に文字列を使って参照したい|teratail](https://teratail.com/questions/36198 [C# - C#において文字列で指定したクラスのメンバ変数を呼び出す方法|teratail](https://teratail.com/questions/49353 [C# - 【C#】連番付きの変数をループで処理したい。|teratail](https://teratail.com/questions/63570 [C# - unityでプロパティに動的変数でアクセスしたい|teratail](https://teratail.com/questions/93422 [C# - [Unity] あるstringの文字列と同じ変数名の変数を取得したい|teratail](https://teratail.com/questions/138016 [C# - 文字列を既存の変数名として扱いたい|teratail](https://teratail.com/questions/173619 [C# - 文字列を組み合わせて変数の中身を取得したい。|teratail](https://teratail.com/questions/224183 [C# - stringの文字列と同名の変数をstruct内から編集したい|teratail](https://teratail.com/questions/229896 [Unity - 文字列で指定したフィールド名のゲームオブジェクトを取得したい|teratail](https://teratail.com/questions/293579 [Unity - unity c# 変数名を変数を使って指定|teratail](https://teratail.com/questions/318656 [C# - Unity 変化する文字列を変数名として、代入をしたい|teratail](https://teratail.com/questions/319398
YAmaGNZ

2021/09/01 23:03

Character1の数字の部分をループで変化させれば順番にアクセスできるんじゃない? って考えるのだと予想します。 「配列」という言葉は知っていても、どうやって使うかどういう時に使うべきなのかが分からないんじゃないですかね?
退会済みユーザー

退会済みユーザー

2021/09/02 00:08

コレクションクラスの存在を知らない可能性はありますね。 いずれにせよ、こういう所で質問する前に、入門書等からきちんと段階踏んで基礎を学習した方がいいとは思いますが。
BluOxy

2021/09/02 10:15 編集

earth545 さん、GetProperty でどのように解決したんでしょう。Character1 はプロパティではなくフィールドなので解決しているかどうか疑問です。
guest

回答3

0

こういう事をしたいんですかね?
クラスの型情報からすべてのメンバを取得する

CharacterList内にCharacter1, 2, 3とメンバがありますが、オブジェクトをグループ化して扱いたいのであれば、コレクションの使用を検討してみてください。
コレクション (C#)

投稿2021/09/01 12:49

編集2021/09/02 00:15
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

Character1という部分を文字列型を使って扱いたいです。

この引用を実現するなら、nameof 式 が使えます。
string str = nameof(cList.Character1);string str = "Character1"; と str に代入される値が同じです。

また余談ですが、変数名が 1,2,3 と連番になる場合は、配列として扱う方がシンプルになります。

C#

1int[] cList = { 1, 1, 0 };

投稿2021/09/01 12:52

BluOxy

総合スコア2663

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

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

0

ベストアンサー

Type.GetProperty メソッド (System) | Microsoft Docs

プロパティなら、こういうのがあります

投稿2021/09/01 12:52

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問