0

次のことを行うことは可能ですか?そうでない場合、私が達成しようとしていることを行うためのより良い方法はありますか?

Person.cs

    public class Person
    {
        public string ID { get; set; }
        public string Name { get; set; }
        public string Zip { get; set; }

        public Person()
        {
        }

リストのどの部分にあるかに基づいてメソッドを動的に呼び出すことができるように、この部分を実行したいのですが、これを行うより良い方法があるかどうかはわかりません。

        public void Assign(string k, string v)
        {
            k = v;
        }

public string getKeyValue(string k, int w, char d)
    {
        string[] value = k.Split(d);
        int i = 0;
        foreach (string part in value)
        {
            if (i == w)
            {
                k = part;
            }
            i++;
        }

        return k;
    }
    }

そして、コードビハインドで次のように呼び出します

Default.aspx.cs

List<string> initList = new List<string> 
{ 
    "ID = 1", "Name = this is a test", "Zip = 5","ID = 2", "Name = this is a second test", "Zip = 10"        
};

List<object> myList = new List<object>();

Person prs = new Person();
foreach (string txt in initList)
{
    string key = prs.getKeyValue(txt,0,'=');
    string val = prs.getKeyValue(txt,1,'=');

    prs.Assign(key,val);

}

 myList.Add(prs);
4

3 に答える 3

0

あなたがやろうとしている方法はかなり恐ろしいものです。エラーの可能性がたくさんあるからです。これは非常にハッキーでエラーが発生しやすい方法です...しかし、リフレクションでそれを行う方法のアイデアが得られます...

List<string> initList = new List<string> 
{ 
    "ID = 1", 
    "Name = this is a test", 
    "Zip = 5", 
    "ID = 2", 
    "Name = this is a second test", 
    "Zip = 10" 
};

List<Person> list = new List<Person>();
Person person = null;
Type type = typeof(Person);
foreach (var str in initList)
{
    var pair = str.Split('=').Select(s => s.Trim()).ToArray();
    if (pair[0] == "ID")
    {
        person = new Person();
        list.Add(person);
    }
    if (person != null)
    {
        PropertyInfo property = type.GetProperty(pair[0]);
        if (property != null)
            property.SetValue(person, pair[1]);
    }
}

foreach (var item in list)
    Console.WriteLine(item.ID);

Console.ReadLine();
于 2013-08-01T20:58:13.833 に答える