日期:2014-05-17  浏览次数:20787 次

【求证,求解脱】取变量,对象的名称,不知道可否实现
1.我现在有 字符串对象 string userName="Tearer";
问:我要怎么才能取到我定义的字符串变量的名字,而不是值,也就是userName这个
2.我现在有 Users user=new Users(); 对象
问:我怎么才能取到我定义的对象的名字,也就是Users这个

前提是不用反射,不遍历。

我的用处大概就是拼接SQL语句的时候,我不希望用字符串值写死,而是拿对象的名称直接取出拼接到SQL里。
如"select * from table where id=3 order by "+取名(userName)

 我不确定能否做到,所以求解脱。我真心不想在这个实体类为每一个字段定义常量来达到目的。
谢谢!

------解决方案--------------------
取变量名类名之类的功能就是反射了,你不用反射是做不到的,设计反射机制的目的最初也就是为了取得变量名和类名之类的,

你应该用反射,实体类的属性和字段名一一对应,这样你可以用反射来取得所有实体类的属性,然后生成sql语句,

不过你没必要自己实现,还不如用hibernate之类的框架,或者用linq,
------解决方案--------------------
实际上用一个字典就解决你的问题了。
事实上.NET框架库自己就是这么用的,比如说Control的Name属性,作为Controls集合的索引。 

Dictionary<string, object> Vars = new Dictionary<string, object>();
Vars.Add("userName", userName);
Vars.Add("user", user);
...
sql = "select * from table where id=3 order by " + Vars["UserName"].ToString();