如何将一个类属性值分配给其他类属性值

时间:2010-05-18 19:23:32

标签: c# .net

我有一个班级

public Student  student {get;set;}

public Students students {get;set;}

两个类属性都相同.. 我从数据库中获取学生价值..我需要将这些值分配给学生.. 谁能告诉我怎么做?

2 个答案:

答案 0 :(得分:0)

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

以下是摘要:

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

每个类都应该包含像变量一样设置的字符串,整数等属性:

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

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

答案 1 :(得分:0)

您可以执行以下操作:http://gist.github.com/405432

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

    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);
            }
        }
    }