C# 如何将一个类属性值指定给Other类属性值

C# 如何将一个类属性值指定给Other类属性值,c#,.net,C#,.net,我有一节课 public Student student {get;set;} public Students students {get;set;} 两个类属性都相同。。 我正在从数据库中获取学生的价值观。。我需要把这些价值观分配给学生。。 有人能告诉我怎么做吗?需要帮助吗:1)分配类的各种属性,或2)从数据库获取数据 以下是总结: 要从SQL(或MySQL或Oracle等)填充类的属性,需要创建、和。使用连接,编写查询(命令),以便获得所需的数据。然后,在while循环中使用读取器从结

我有一节课

public Student  student {get;set;}

public Students students {get;set;}
两个类属性都相同。。 我正在从数据库中获取学生的价值观。。我需要把这些价值观分配给学生。。 有人能告诉我怎么做吗?

需要帮助吗:1)分配类的各种属性,或2)从数据库获取数据

以下是总结:

要从SQL(或MySQL或Oracle等)填充类的属性,需要创建、和。使用连接,编写查询(命令),以便获得所需的数据。然后,在while循环中使用读取器从结果集中读取值,并填充类

每个类都应该具有字符串、整数等属性,您只需像变量一样设置这些属性:

student.Name = Reader["name"].Equals(DBNull.Value ?? "" : (string)Reader["name"];

如果您需要更多帮助,请发布您的类的定义,也许还可以发布一些关于要填充该类的数据库的更多信息(例如示例表结构和数据)

您可以这样做:

它使用反射在对象上执行深层成员克隆:

    static void Main(string[] args) {
        foreach (var student in Students) 
            student.CloneFrom(Student);
    }

    public static void CloneFrom<T>(this T ToObj, T FromObj) {
        CloneFrom(ToObj, FromObj, new Dictionary<object, object>());
    }

    private static FieldInfo[] GetMemberFields(this Type type) {
        return type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    }

    private static void CloneFrom<T>(T ToObj, T FromObj, Dictionary<object, object> Values) {
        Values.Add(FromObj, ToObj); //The dictionary is used to prevent infinite recursion

        var fields = ToObj.GetType().GetMemberFields();
        object value = null;
        object othervalue = null;
        foreach (var field in fields) {
            value = field.GetValue(FromObj);
            othervalue = field.GetValue(ToObj);
            if (object.Equals(othervalue, value)) continue;

            if (value != null && Values.ContainsKey(value)) {
                //Prevent recursive calls: objA.fieldB.fieldC = objA

                field.SetValue(ToObj, Values[value]);
            } else if (othervalue != null && value != null && !field.FieldType.IsPrimitive && !field.FieldType.IsValueType && !(value is string)
                && field.FieldType.GetMemberFields().Any()) {

                //Do not overwrite object references
                CloneFrom(othervalue, value, Values);
            } else {
                field.SetValue(ToObj, value);
            }
        }
    }
static void Main(字符串[]args){
foreach(学生中的var学生)
学生。克隆自(学生);
}
公共静态无效克隆自(此T ToObj,T FromObj){
CloneFrom(ToObj,FromObj,newdictionary());
}
私有静态字段信息[]GetMemberFields(此类型){
返回类型.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
}
私有静态void CloneFrom(T ToObj、T FromObj、字典值){
Values.Add(FromObj,ToObj);//字典用于防止无限递归
var fields=ToObj.GetType().GetMemberFields();
对象值=空;
对象othervalue=null;
foreach(字段中的变量字段){
value=field.GetValue(FromObj);
othervalue=field.GetValue(ToObj);
如果(object.Equals(othervalue,value))继续;
if(value!=null&&Values.ContainsKey(value)){
//防止递归调用:objA.fieldB.fieldC=objA
field.SetValue(ToObj,Values[value]);
}else if(othervalue!=null&&value!=null&&field.FieldType.IsPrimitive&&field.FieldType.IsValueType&&field!(值为字符串)
&&field.FieldType.GetMemberFields().Any()){
//不要覆盖对象引用
克隆自(其他值、值、值);
}否则{
字段设置值(ToObj,值);
}
}
}