首页 新闻 会员 周边

如何给满足条件的属性赋值?

0
悬赏园豆:10 [已解决问题] 解决于 2012-01-08 01:50

比如有如下的类:

 

public class MyClass
{
public float 属性1 { get; set; }
public float 属性2 { get; set; }
public float 属性3 { get; set; }
 
    ....
    public float 属性100{ get; set; }

}

在主函数中遍历该类的所有属性(这个可以用反射实现),如果某个属性满足条件,则将该属性的值赋值,请问这个如何实现呢?

实现类似这样的伪代码

MyClass myClass=new MyClass();

public void 判断<T>(T 类名,string 属性名)
{
//在此已经获得该实例的类型
//在此已经确定要给该类的 属性i 赋值

期望为 myClass.属性i 赋值

}

 

问题补充: 已经遍历出了该类所有属性的名称,其中名称和输入的字符串相同的属性,是期望赋值的属性。 实际问题是有这样一个存储类的实例的数组 public MyClass[] myClass= new MyClass[10000]; for (int i = 0; i < 101; i++) { myClass[i] = new MyClass{ };//实例化 } 希望为myClass[i] i=0-9999的某些属性赋值,要为具体哪个属性赋值希望可以用户指定。 如果为每个属性都写一个函数,过于繁琐,有没有什么简便的方法呢?谢谢大家帮忙指导哈!
YTYT2002YTYT的主页 YTYT2002YTYT | 初学一级 | 园豆:113
提问于:2011-02-09 03:53
< >
分享
最佳答案
0

给一个示例:

class Program
{
static void Main(string[] args)
{
SetSomeValue();
Console.ReadKey();
}

static void SetSomeValue()
{
List
<Area> al = GetOrigialList(10).FindAll(
delegate(Area a) { return a.Area_ID > 5; }
);
foreach (Area a in al)
{
a.Area_Name
= a.Area_Name + "[修改后的值]";
}
foreach (Area a in al)
{
Console.WriteLine(a.Area_ID.ToString()
+ "-" + a.Area_Name);
}
}
static List<Area> GetOrigialList(int num)
{
List
<Area> al = new List<Area>();
for (int i = 0; i < num; i++)
{
Area a
= new Area();
a.Area_ID
= i;
a.Area_Name
= "" + a.Area_ID + "";
al.Add(a);
}
return al;
}

}

#region Area
public class Area
{
private int m_Area_ID;
public int Area_ID
{
get { return m_Area_ID; }
set { m_Area_ID = value; }
}

private string m_Area_Name;
public string Area_Name
{
get { return m_Area_Name; }
set { m_Area_Name = value; }
}
}
#endregion

 

 

收获园豆:10
邀月 | 高人七级 |园豆:25475 | 2011-02-09 09:48
恩,谢谢啦!不过还是有些不解的地方
YTYT2002YTYT | 园豆:113 (初学一级) | 2011-02-16 21:41

@YTYT2002YTYT: 学习了

artwl | 园豆:16736 (专家六级) | 2011-11-17 18:02
其他回答(2)
0

    class Program
    {
       
static void Main(string[] args)
{
            SetSomeValue();
            Console.ReadKey();
        }

       
static void SetSomeValue()
        {
            List
<Area> al = GetOrigialList(10).FindAll(
               
delegate(Area a) { return a.Area_ID > 5; }
                );
           
foreach (Area a in al)
            {
                a.Area_Name
= a.Area_Name + "[修改后的值]";
            }
           
foreach (Area a in al)
            {
                Console.WriteLine(a.Area_ID.ToString()
+ "-" + a.Area_Name);
            }
        }
       
static List<Area> GetOrigialList(int num)
        {
            List
<Area> al = new List<Area>();
           
for (int i = 0; i < num; i++)
            {
                Area a
= new Area();
                a.Area_ID
= i;
                a.Area_Name
= "" + a.Area_ID + "";
                al.Add(a);
            }
           
return al;
        }

    }

   
#region Area
   
public class Area
    {
       
private int m_Area_ID;
       
public int Area_ID
        {
           
get { return m_Area_ID; }
           
set { m_Area_ID = value; }
        }

       
private string m_Area_Name;
       
public string Area_Name
        {
           
get { return m_Area_Name; }
           
set { m_Area_Name = value; }
        }
    }
   
#endregion

樊佐雷 | 园豆:220 (菜鸟二级) | 2011-02-09 12:35
0

利用反射为指定的名称的属性赋值

Shiaupo | 园豆:272 (菜鸟二级) | 2011-02-09 13:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册