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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

3回答

1038閲覧

stringの文字列と同名の変数をstruct内から編集したい

Yukirr4_

総合スコア728

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2019/12/16 10:03

string str = "ABCD"
とします。

C#

1public struct Objects 23 public int EFG; 4 public int PQL; 5 public int ABCD; 6 ...... 7

このようにstruct型に多量の被りがないint変数が入っています。この中からstrの文字列ABCDの変数名だけを取得することは可能ですか?

その変数を編集もしくは取得したいです。

どなたか回答お願いします

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

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

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

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

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

guest

回答3

0

ベストアンサー

Reflectionを使えば可能です。
今回使うのはType.GetFieldとFieldInfo.SetValue, FieldInfo.GetValueですかね。
今回はstructなのでそのままメソッドの引数にすると値のコピーが渡されるだけなので取得ではなく編集をする際はボックス化が必要です。

C#

1struct Data 2{ 3 public int ABCD; 4 public int EFG; 5 public int PQL; 6} 7 8class MainClass 9{ 10 static void Main() 11 { 12 var data = new Data(); 13 Console.WriteLine(data.ABCD); // 初期状態の確認(0が出力される) 14 var fieldInfo = typeof(Data).GetField("ABCD"); // "ABCD"のFieldInfoを取得する 15 Object obj = data; // ボックス化する(参照型として扱える) 16 fieldInfo.SetValue(obj, 128); // 参照型なので値が更新される 17 data = (Data)obj; // Data型に戻す。 18 Console.WriteLine(data.ABCD); // 更新の確認 19 20 Console.WriteLine(fieldInfo.GetValue(data)); // 値を取得する場合はこう扱う 21 Console.ReadKey(); 22 } 23}

投稿2019/12/16 11:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

「c# リフレクション 構造体」と検索すると参考になるかと思います。

投稿2019/12/16 10:29

YAmaGNZ

総合スコア10222

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

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

0

if(str=="ABCD") ABCD=なんたら;
if(str=="EFG") EFG=かんたら;
if(str=="PQL") PQL=うんたら;

投稿2019/12/16 10:11

y_waiwai

総合スコア87719

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

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

Yukirr4_

2019/12/16 10:18

やはりそのように一つずつやっていくしかないのですね ありがとうございます!
y_waiwai

2019/12/16 11:45

初心者の方はよくこういうことを考えるようですが、なぜそれが必要なのかをよく考えてみるほうがいいかと思います。
Yukirr4_

2019/12/16 12:17

数値の簡単な代入をするならforで回せるので、そのようなことを今回の件でも使えないのかと考えました。 しかし今回は変数の名前あたり等を使うのでよくわからず質問するに至りました。 このような考え方は今後苦労しますか?
y_waiwai

2019/12/16 12:41

少なくとも初心者が思いつきでするようなことではないです。 他の回答を理解することは出来るでしょうか。 たとえそれが実現できたとしても、その言語独自の操作となってしまい他には使いまわせない死んだノウハウとなってしまう可能性が高いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問