1.我现在有 字符串对象 string userName="Tearer";
问:我要怎么才能取到我定义的字符串变量的名字,而不是值,也就是userName这个
2.我现在有 Users user=new Users(); 对象
问:我怎么才能取到我定义的对象的名字,也就是Users这个
前提是不用反射,不遍历。
我的用处大概就是拼接SQL语句的时候,我不希望用字符串值写死,而是拿实体类的属性的名称直接拼接到SQL里。
如"select * from table where id=3 order by "+取名(userName)
我不确定能否做到,所以求解脱。我真心不想在这个实体类为每一个字段定义常量来达到目的。
谢谢!
你可以用hashtable了
Hashtable paramHash = new Hashtable(); paramHash.Add("userName", "Tearer");
然后做一个拼接的方法
StringBuilder sb = new StringBuilder(); sb.Append("select * from table"); if (paramHash != null && paramHash.Count != 0) { foreach (string key in paramHash.Keys) { object item = paramHash[key]; //这个地方进行拼接 } }
你这样做的话 ,
paramHash[key] 取到的还是值 也就是 Tearer
我本意是取 userName 我的字符串需要的是 这个列的列名,而不是列值
@聪明的傻瓜: 我要怎么才能取到我定义的字符串变量的名字,而不是值,也就是userName这个
那个哈希表写的顺序错误了,应该是
Hashtable paramHash = new Hashtable(); paramHash.Add("Tearer","userName");
你在每定义一个变量前就把变量名字和类型加入哈希表,变量名字作为key 类型为value。
你太疯狂了,想法是好的,不过不用反射也不遍历,倒是有个投机的方法,不用VS去编译,自己弄个编译的工具,编译前将“取名(userName)”替换成"userName",然后再编译。
目前想到的方法就是反射
1. nHibernate
2. Reflection
3. see the above two
已找到方法,虽然不是很完美,我在尝试优化
public static string GetPropertyName<TSource>(Expression<Func<TSource, string>> property)
{
return ((MemberExpression)property.Body).Member.Name;
}
谢谢大家