两个结构
struct p1
{
  public int a;
}
struct p2
{
  public string b;
}
默认过程:
private void setp1(ref p1 p)
{
  random rnd=new random();
  p.a=rnd.next(10000);
}
private void setp2(ref p2 p)
{
  random rnd=new random();
  p.b=rnd.next(10000).tostring();
}
我想有没有办法把两个过程集成起来?????????????????????问问能不能实现
private setp(ref type p)
{
   反射p的字段并且赋值
}

解决方案 »

  1.   

    struct p1
    {
        public int a;
        public string b
        {get{return a.ToString();}}
    }
      

  2.   

    struct p
    {
            public int a;        public override string ToString()
            {
                return a.ToString();
            }
    }
      

  3.   

    使用泛型。
    private setp(ref T p)
    {
       switch(p.GetType())
     {
    ......}
    }
      

  4.   


            struct p1
            {
                public int a;
            }
            struct p2
            {
                public string b;
            }
            private object setp(object o)
            {
                System.Random rnd = new System.Random();
                FieldInfo[] fields = o.GetType().GetFields();
                Type ht = o.GetType();
                if (fields[0].FieldType.ToString() == "System.Int32")
                {
                    object oo = new object();
                    oo = rnd.Next(10000);
                    fields[0].SetValue(o, oo);
                }
                else if (fields[0].FieldType.ToString() == "System.String")
                {
                    object oo = new object();
                    oo = rnd.Next(10000).ToString();
                    fields[0].SetValue(o, oo);
                }
                return o;
            }        private void button1_Click(object sender, EventArgs e)
            {
                p1 p = new p1();
                object o = setp(p);
                p = (p1)o;
                MessageBox.Show(p.a.ToString());
            }        private void button2_Click(object sender, EventArgs e)
            {
                p2 p = new p2();
                object o = setp(p);
                p = (p2)o;
                MessageBox.Show(p.b.ToString());
            }