int id1 = 0; int id2 = 0; int id3 = 0; int id4 = 0; for (int i = 1; i <= 4; i++) { id.i = i; }
理想
id1 = 1;
id2 = 2;
id3 = 3;
id4 = 4;
上記のようなことをやりたいのですが、可能なのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
上記のようなことをやりたいのですが
よほど理由がない限り、配列を使うべき場面です。
投稿2022/01/07 12:20
総合スコア146018
0
お遊びでやってみました。
unsafe ならいける!と思ったら意外な結果に・・
C#
1static void Main() { 2 int id1 = 0; 3 int id2 = 0; 4 int id3 = 0; 5 int id4 = 0; 6 unsafe { 7 int* id = &id4; 8 for (int i = 1; i <= 4; i++) { 9 id[i - 1] = i; 10 } 11 } 12 Debug.WriteLine("{0},{1},{2},{3}", id1, id2, id3, id4); 13} 14結果 154,3,2,1
ローカル変数の並びは逆になってるんですね。
あくまでお遊びです。使ってないローカル変数はコンパイラが削除することもあるのでやってはいけません。
C#
1[StructLayout(LayoutKind.Sequential)] 2unsafe class UnsafeTest 3{ 4 int id1 = 0; 5 int id2 = 0; 6 int id3 = 0; 7 int id4 = 0; 8 public UnsafeTest() { 9 fixed (int* id = &id1) { 10 for (int i = 1; i <= 4; i++) { 11 id[i - 1] = i; 12 } 13 } 14 Debug.WriteLine("{0},{1},{2},{3}", id1, id2, id3, id4); 15 } 16} 17結果 181,2,3,4
これは予想通り
リフレクション
C#
1class ReflectionTest 2{ 3 int id1 = 0; 4 int id2 = 0; 5 int id3 = 0; 6 int id4 = 0; 7 public ReflectionTest() { 8 Type type = this.GetType(); 9 for (int i = 1; i <= 4; i++) { 10 var fi = type.GetField(string.Format("id{0}",i), BindingFlags.NonPublic | BindingFlags.Instance); 11 fi.SetValue(this, i); 12 } 13 Debug.WriteLine("{0},{1},{2},{3}", id1, id2, id3, id4); 14 } 15} 16結果 171,2,3,4
これも予想通り
でも配列を使ったほうがシンプルですよね。
投稿2022/01/08 08:05
総合スコア2707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
使った事ないので全く分かりませんが、
System;
System.Reflection;
GetType.GetField.SetValue;
辺りで可能?
投稿2022/01/08 06:25
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。