35772


お世話になります。

タイトルの通りで、例えば

[code]

    public class Table_sample
        {
            public string num01 { get; set; }
            public string num02 { get; set; }
            public string num03 { get; set; }
        }
    
[/code]

というモデルがあったとき、

[code]

    Table_sample tbl = new Table_sample();
    for(i=0;i<3;i++){
    　//列名を動的に指定したい
      tbl."num"+i = i + "番目の数値";
    }
    
[/code]

のようなことは出来るでしょうか？


CC BY-SA 3.0
2017-06-21T05:39:13.487
35771
2017-06-21T06:05:47.710
2017-06-21T06:03:47.493
21092
23908
question
c# mvc
C# エンティティモデルのプロパティ名を動的に指定して値の設定ができるか？


`System.Reflection`を使えばできます。

できますが、可読性も実行速度も下がり実行時エラーの要因にもなりますので、Reflectionを使う前に配列やDictionary等でうまく対応する方法について検討することを強くお勧めします。

[code]

    using System;
    
    namespace ConsoleApplication1
    {
        public class Table_sample
        {
            public string num01 { get; set; }
            public string num02 { get; set; }
            public string num03 { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                var tbl = new Table_sample();
                for (var i = 1; i <= 3; i++)
                {
                    //列名を動的に指定する
                    var property = tbl.GetType().GetProperty(string.Format("num{0:D2}", i));
                    property.SetValue(tbl, string.Format("{0}番目の数値", i));
                }
                //答え合わせ
                Console.WriteLine(tbl.num01);
                Console.WriteLine(tbl.num02);
                Console.WriteLine(tbl.num03);
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2017-06-21T06:05:47.710
35772
2017-06-21T06:05:47.710
9820
35771
answer