C# 使用属性和方法动态访问类变量

C# 使用属性和方法动态访问类变量,c#,asp.net,C#,Asp.net,我有自己的数据类型用于数据库,该数据库具有各种属性来操作值,例如: First: original value IsNull: is the current state null (no value in Data) IsFirstNull: was the initial state of the object null Changed: has the value changed since the initial value was set. SetNull(): set the

我有自己的数据类型用于数据库,该数据库具有各种属性来操作值,例如:

 First: original value
 IsNull: is the current state null (no value in Data)
 IsFirstNull: was the initial state of the object null
 Changed: has the value changed since the initial value was set.
 SetNull(): set the object to null
 SetFirstNull: set the initial value to null
 Reset: set values all to original settings.
每个对象都有这些。每种类型的标准变量都有一个对象,例如:

 int - IntType
 string - StringType
 bool - BoolType
我将这些类型设置为处理从表中读取的每个变量的不同状态以及处理空值。总是很难判断一个值是否为null,或者在最初读取该值时它是否为null,这样我就知道如何写回该值,或者该值是否已更改。有时,从表中读取数据时,需要知道原始值是什么

所以我只对我从表中读取的数据使用这些,这样我就可以跟踪最初得到的值,包括空值,跟踪更改以及重置为原始值

我希望能够通过属性访问数据,因此我将其设置为:

 public class LoginDTO
    {
        public IntType loginID = new IntType();
        public StringType userName = new StringType();

        #region Properties

        public object LoginID
        {
            get
            {
                object value = null;
                return NullHandler.SetDbObjectValueFromValue(loginID, ref value);
            }
            set
            {
                NullHandler.GetValueFromDbObject(value, ref loginID);
            }
        }

        public object UserName
        {
            get
            {
                object value = null;
                return NullHandler.SetDbObjectValueFromValue(userName, ref value);
            }
            set
            {
                NullHandler.GetValueFromDbObject(value, ref userName);
            }
       } 
要访问数据,我可以做如下操作

 loginDto.UserName
但是要访问(设置或获取)IsNull属性,我不能真正为每个变量使用属性

通常,访问权限类似于:

If( loginDto.IsNull)...

or 

loginDto.SetNull();
但是在一个类中,可以有许多来自表的变量,一个人表可以有20或30个字段,所以20或30个字段以及这些字段的20或30个属性

我正在考虑在类中设置一个方法,在其中传递变量的名称,类似于:

SetNull(“loginDto”),并且能够以某种方式设置loginDto变量的方法

但我不确定如何访问变量来更改每个变量的IsNull属性

如何传递文本(即SetNull(“loginID”)或SetNull(“userName”)),以便方法知道要设置哪个变量

还是有更好的方法

我想放弃整个属性概念,只设置每个变量,直接访问它们,因为属性和方法已经在数据类型类中设置好了。只是通常最好使用属性从外部访问类变量

谢谢


汤姆

听起来你好像在尝试编写自己的ORM。您选择避免使用实体框架或NHibernate等已有的ORM解决方案有什么特别的原因吗?对于像
SetNull(“loginID”)
这样的调用,可以使用反射来完成。但这不是类型安全的。甚至会员安全。如中所示,如果有人调用
SetNull(“memberthattoetextist”)
会发生什么。如果你需要重命名一列呢?有点。但我只是将IntType、StringType、DateType作为public,这可能很好,因为它们有自己的属性。但是想要为整个类设置一个SetNull,并将属性或对象的名称传递给它。更改名称不是问题。我的问题是,我不知道如何设置属性(即loginID.SetNull())。我将如何使用反射?记住,这是从Dto类内部完成的。