private string _aa;
public string Aa
{
get { return _aa; }
set { _aa = value; }
}
private string _bb;
public string Bb
{
get { return _bb; }
set { _bb = value; }
}
private List<CC> _cc;
public List<CC> Cc
{
get { return _cc; }
set { _cc = value; }
}
private ListItemCollection dd;
public ListItemCollection Dd
{
get { return dd; }
set { dd = value; }
}
}
---------------------------------------------
假如这是个实体类
我现在反射它的 所有属性
Users users = new Users();
users.GetType().GetProperties();
返回的是一个PropertyInfo[] info; 属性的集合
问题出来了, 假如我想写一个方法,
我想只反射当前Users类的 个别属性, 比如, 我想拼接个字符串
是根据当前Users的aa bb属性, 而且其他的属性我又不想获得,
麻烦在这里 .GetType().GetProperties() 这个方法的时候, 全部反射出来了, 我只想用个别的属性
但是又不想用字符穿去控制 不知道各位有没有什么好办法
30 个解决方案
#1
.GetType().GetProperty("aa")
#2
把个别的属性放在基类中,你再集成,然后反射基类
#3
danjiewu
(阿丹) .GetType().GetProperty("aa")
--------------------------------------------
我知道有这个方法啊, 但是这样做的话, 有点太不灵活了,
我想找到一个可以能控制 实体类属性的方法,
不知道大家有没有什么好的思路给提供一下啊
(阿丹) .GetType().GetProperty("aa")
--------------------------------------------
我知道有这个方法啊, 但是这样做的话, 有点太不灵活了,
我想找到一个可以能控制 实体类属性的方法,
不知道大家有没有什么好的思路给提供一下啊
#4
jsyhello
(不认输) 把个别的属性放在基类中,你再集成,然后反射基类
------------------------------------------------------------
我懂你的意思啊, 但是你想想,如果这样做的话岂不是很麻烦, 简单的实体类反射字段,
难道还要一个 抽象类, 我原来试过用 params 这个 ,动态参数 ,可是, 还是不行啊, 太麻烦了,
7,8个的还行, 要是一个表里, 40,50的那种, 岂不是要累死, 不好啊, 愁死
各位朋友, 多多提供思路啊
(不认输) 把个别的属性放在基类中,你再集成,然后反射基类
------------------------------------------------------------
我懂你的意思啊, 但是你想想,如果这样做的话岂不是很麻烦, 简单的实体类反射字段,
难道还要一个 抽象类, 我原来试过用 params 这个 ,动态参数 ,可是, 还是不行啊, 太麻烦了,
7,8个的还行, 要是一个表里, 40,50的那种, 岂不是要累死, 不好啊, 愁死
各位朋友, 多多提供思路啊
#5
给你返回个数组,而你只想用数组其中两个数据,这能有什么问题?
#6
从你的Info数组中查找其.Name叫做aa和bb的两个单元,这会产生什么问题?
你是不会foreach循环查找数组呢?还是不会new一个新的List<PropertyInfo>将这两个单元放入集合?
你是不会foreach循环查找数组呢?还是不会new一个新的List<PropertyInfo>将这两个单元放入集合?
#7
那要照你这么说的话, 是我问的太低端了, 还是您老人家的技术太高超了,
那么我的问你了, 你说的 foreach 循环 OK
如果 有20个属性, 给你循环的话 怎么办, 假如, 我的属性名字变了, 怎么办 , 这次我用的AA BB
下个类型我用的是别的名字, 难道照你说我, 我要根据不同的属性, 写不同的方法,
那跟手写mvc有什么区别, 我也就不会在这里提问了, 哥们。你懂得,
#8
那就通过反射实例化类,在显示转换为对应的类,就可以点出那些属性!
#9
不是, 你理解错了啊 8楼的朋友,
这么说吧, 我现在是可以找到当前的这个类型, 也可以获取相应的属性,
但是我现在想要的效果就是 ,能控制他的属性,
比如, 现在是这个类型, 我就想要 aa bb的属性, 其他的属性, 在调用GetProperties();
方法的时候,去掉其他没用的属性, 我要的是这样的效果
呵呵,
不过还是谢谢你能帮顶 , 3Q
#10
属性名变?什么意思?属性名还能变啊?
#11
我的意思是, 要万一换个实体类,属性名不就是变了吗?
要灵活多变!!!!
#12
楼主,你需要的不是如此的class,也不是反射,
而是抽象描述数据特征
你的User只不过是个Key-Value集合而已,
比如这样写:
User.Properties.Add(New Property("Name","张三"));
取值的时候:
User.Properties["Name"].Value; //这种需要自己实现索引器
或者:
User.Properties.Fist(p=>p.Key=="Name").Value; //利用现成的L2O
而是抽象描述数据特征
你的User只不过是个Key-Value集合而已,
比如这样写:
User.Properties.Add(New Property("Name","张三"));
取值的时候:
User.Properties["Name"].Value; //这种需要自己实现索引器
或者:
User.Properties.Fist(p=>p.Key=="Name").Value; //利用现成的L2O
#13
感谢飞翔的心,
可以你说的这个是在给实体类里面传值, 我想要的是这样,
Users users = new Users();
users.aa="测试";
users.bb="测试";
PropertyInfo[] info = users.GetProperties();
现在我这里面是不是 除aa bb以外是不是还有其他的属性啊,
StringBuilder sb = new StringBuilder();
for (int i = 0; i < info.Length; i++)
{
sb.Append(i == 0 ? "" : ",");
sb.Append(info[i].Name);
}
那么我在这里的时候, 我想把其他不要的属性, 排除掉不让他获取,
在假设, 我的Users 是Object 基类,
我现在不知道我要排除什么属性,Users 是会变的。
属性也会变。
我知道mvc框架, 是用linq 但是我有不想用那种字符串截取的方式, 不知道还有没有更好的办法啊
#14
你要得到什么属性应该知道吧?
List<PropertyInfo> list = new List<PropertyInfo>();
Type t = typeof(ClassA);
string[] str = { "A", "B" };
foreach (string s in str)
{
list.Add(t.GetProperty(s));
}
foreach (PropertyInfo p in list)
Console.WriteLine(p.Name);
Console.ReadLine();
#15
哎~~~ 难道真的就没有那种, PropertyInfo 就没有, 让属性不可读的属性
啊啊啊啊啊啊
我是真不想用循环啊
#16
你不想循环就L2O,
不是都给了代码了吗?
User.Properties.Fist(p=>p.Key=="Name").Value
你套用到自己的反射出来的集合中不就可以了
不是都给了代码了吗?
User.Properties.Fist(p=>p.Key=="Name").Value
你套用到自己的反射出来的集合中不就可以了
#17
你是不是想要筛选出部分Property?你可以用自定义的Attribute进行过滤
#18
你能用多少反射啊?...
至于么,直接传你需要的属性名过去找啊
#19
User.Properties.Fist(p=>p.Key=="Name").Value;
---------------------------
飞翔的心
你这个 代码。。。。
我怎么点不到那个方法呢?
还是你们自己写的方法?????
---------------------------
飞翔的心
你这个 代码。。。。
我怎么点不到那个方法呢?
还是你们自己写的方法?????
#20
linq
#21
using System.Linq
#22
=,=
我用的是05的啊,这不是08的类库么,
革皮了=,=啊 啊啊啊啊啊啊啊 啊
#23
饿饿,,
原来05里也有, 08里是默认就给引进来了
但是引完了, 还是没有这个方法a
是不是 08里才有的方法啊 - -!
原来05里也有, 08里是默认就给引进来了
但是引完了, 还是没有这个方法a
是不是 08里才有的方法啊 - -!
#24
.net3.5
把你的vs升级到08吧,简单点
把你的vs升级到08吧,简单点
#25
反射的目标成员aa bb的名字你总该知道吧,筛选一下就行了
#26
users.GetType().GetProperties().select(items=>items.aa&&items.bb);
#27
users.GetType().GetProperties().select(items=>string.format("{0},{1}",items.aa,items.bb)).ToArray()
帮你拼接了,,号分开,aa,bb为一个string的数组
#28
#29
哈哈, 不号意思啊, 这两天没上, 论坛的东西好几天没上了, 不好意思啊,
感谢大家能踊跃的帮忙, 谢谢。
那个问题已经解决了, 不过第二个问题又出来了, 希望大家能帮忙解决一下问题, 最后一个了, 做大家
分就散了, 谢谢。
public static SqlParameter[] addparam(object obj)
{
SqlParameter[] pars = new SqlParameter[obj.GetType().GetProperties().Length];
SqlParameter par = null;
PropertyInfo[] info = obj.GetType().GetProperties();
for (int i = 0; i < pars.Length; i++)
{
//这个地方是动态参数、
par = new SqlParameter("@" + info[i].Name, info[i].PropertyType);
pars[i] = par;
pars[i].Value = info[i].GetValue(obj,null);
}
return pars;
}
问题来了啊, 我那个动态参数的地方,
如果我用Datetime 类型的, 它没办法自动匹配上,
而且还报错误,
将截断字符串或二进制数据。
语句已终止。
数据库的错误, 貌似是因为类型不匹配, 不知道大家有没有办法, 帮个忙啊, 谢谢了,
我的框架就差最后这一步, 大家一定要帮帮啊, - -!
感谢大家能踊跃的帮忙, 谢谢。
那个问题已经解决了, 不过第二个问题又出来了, 希望大家能帮忙解决一下问题, 最后一个了, 做大家
分就散了, 谢谢。
public static SqlParameter[] addparam(object obj)
{
SqlParameter[] pars = new SqlParameter[obj.GetType().GetProperties().Length];
SqlParameter par = null;
PropertyInfo[] info = obj.GetType().GetProperties();
for (int i = 0; i < pars.Length; i++)
{
//这个地方是动态参数、
par = new SqlParameter("@" + info[i].Name, info[i].PropertyType);
pars[i] = par;
pars[i].Value = info[i].GetValue(obj,null);
}
return pars;
}
问题来了啊, 我那个动态参数的地方,
如果我用Datetime 类型的, 它没办法自动匹配上,
而且还报错误,
将截断字符串或二进制数据。
语句已终止。
数据库的错误, 貌似是因为类型不匹配, 不知道大家有没有办法, 帮个忙啊, 谢谢了,
我的框架就差最后这一步, 大家一定要帮帮啊, - -!
#30
ken die a a a
#1
.GetType().GetProperty("aa")
#2
把个别的属性放在基类中,你再集成,然后反射基类
#3
danjiewu
(阿丹) .GetType().GetProperty("aa")
--------------------------------------------
我知道有这个方法啊, 但是这样做的话, 有点太不灵活了,
我想找到一个可以能控制 实体类属性的方法,
不知道大家有没有什么好的思路给提供一下啊
(阿丹) .GetType().GetProperty("aa")
--------------------------------------------
我知道有这个方法啊, 但是这样做的话, 有点太不灵活了,
我想找到一个可以能控制 实体类属性的方法,
不知道大家有没有什么好的思路给提供一下啊
#4
jsyhello
(不认输) 把个别的属性放在基类中,你再集成,然后反射基类
------------------------------------------------------------
我懂你的意思啊, 但是你想想,如果这样做的话岂不是很麻烦, 简单的实体类反射字段,
难道还要一个 抽象类, 我原来试过用 params 这个 ,动态参数 ,可是, 还是不行啊, 太麻烦了,
7,8个的还行, 要是一个表里, 40,50的那种, 岂不是要累死, 不好啊, 愁死
各位朋友, 多多提供思路啊
(不认输) 把个别的属性放在基类中,你再集成,然后反射基类
------------------------------------------------------------
我懂你的意思啊, 但是你想想,如果这样做的话岂不是很麻烦, 简单的实体类反射字段,
难道还要一个 抽象类, 我原来试过用 params 这个 ,动态参数 ,可是, 还是不行啊, 太麻烦了,
7,8个的还行, 要是一个表里, 40,50的那种, 岂不是要累死, 不好啊, 愁死
各位朋友, 多多提供思路啊
#5
给你返回个数组,而你只想用数组其中两个数据,这能有什么问题?
#6
从你的Info数组中查找其.Name叫做aa和bb的两个单元,这会产生什么问题?
你是不会foreach循环查找数组呢?还是不会new一个新的List<PropertyInfo>将这两个单元放入集合?
你是不会foreach循环查找数组呢?还是不会new一个新的List<PropertyInfo>将这两个单元放入集合?
#7
那要照你这么说的话, 是我问的太低端了, 还是您老人家的技术太高超了,
那么我的问你了, 你说的 foreach 循环 OK
如果 有20个属性, 给你循环的话 怎么办, 假如, 我的属性名字变了, 怎么办 , 这次我用的AA BB
下个类型我用的是别的名字, 难道照你说我, 我要根据不同的属性, 写不同的方法,
那跟手写mvc有什么区别, 我也就不会在这里提问了, 哥们。你懂得,
#8
那就通过反射实例化类,在显示转换为对应的类,就可以点出那些属性!
#9
不是, 你理解错了啊 8楼的朋友,
这么说吧, 我现在是可以找到当前的这个类型, 也可以获取相应的属性,
但是我现在想要的效果就是 ,能控制他的属性,
比如, 现在是这个类型, 我就想要 aa bb的属性, 其他的属性, 在调用GetProperties();
方法的时候,去掉其他没用的属性, 我要的是这样的效果
呵呵,
不过还是谢谢你能帮顶 , 3Q
#10
属性名变?什么意思?属性名还能变啊?
#11
我的意思是, 要万一换个实体类,属性名不就是变了吗?
要灵活多变!!!!
#12
楼主,你需要的不是如此的class,也不是反射,
而是抽象描述数据特征
你的User只不过是个Key-Value集合而已,
比如这样写:
User.Properties.Add(New Property("Name","张三"));
取值的时候:
User.Properties["Name"].Value; //这种需要自己实现索引器
或者:
User.Properties.Fist(p=>p.Key=="Name").Value; //利用现成的L2O
而是抽象描述数据特征
你的User只不过是个Key-Value集合而已,
比如这样写:
User.Properties.Add(New Property("Name","张三"));
取值的时候:
User.Properties["Name"].Value; //这种需要自己实现索引器
或者:
User.Properties.Fist(p=>p.Key=="Name").Value; //利用现成的L2O
#13
感谢飞翔的心,
可以你说的这个是在给实体类里面传值, 我想要的是这样,
Users users = new Users();
users.aa="测试";
users.bb="测试";
PropertyInfo[] info = users.GetProperties();
现在我这里面是不是 除aa bb以外是不是还有其他的属性啊,
StringBuilder sb = new StringBuilder();
for (int i = 0; i < info.Length; i++)
{
sb.Append(i == 0 ? "" : ",");
sb.Append(info[i].Name);
}
那么我在这里的时候, 我想把其他不要的属性, 排除掉不让他获取,
在假设, 我的Users 是Object 基类,
我现在不知道我要排除什么属性,Users 是会变的。
属性也会变。
我知道mvc框架, 是用linq 但是我有不想用那种字符串截取的方式, 不知道还有没有更好的办法啊
#14
你要得到什么属性应该知道吧?
List<PropertyInfo> list = new List<PropertyInfo>();
Type t = typeof(ClassA);
string[] str = { "A", "B" };
foreach (string s in str)
{
list.Add(t.GetProperty(s));
}
foreach (PropertyInfo p in list)
Console.WriteLine(p.Name);
Console.ReadLine();
#15
哎~~~ 难道真的就没有那种, PropertyInfo 就没有, 让属性不可读的属性
啊啊啊啊啊啊
我是真不想用循环啊
#16
你不想循环就L2O,
不是都给了代码了吗?
User.Properties.Fist(p=>p.Key=="Name").Value
你套用到自己的反射出来的集合中不就可以了
不是都给了代码了吗?
User.Properties.Fist(p=>p.Key=="Name").Value
你套用到自己的反射出来的集合中不就可以了
#17
你是不是想要筛选出部分Property?你可以用自定义的Attribute进行过滤
#18
你能用多少反射啊?...
至于么,直接传你需要的属性名过去找啊
#19
User.Properties.Fist(p=>p.Key=="Name").Value;
---------------------------
飞翔的心
你这个 代码。。。。
我怎么点不到那个方法呢?
还是你们自己写的方法?????
---------------------------
飞翔的心
你这个 代码。。。。
我怎么点不到那个方法呢?
还是你们自己写的方法?????
#20
linq
#21
using System.Linq
#22
=,=
我用的是05的啊,这不是08的类库么,
革皮了=,=啊 啊啊啊啊啊啊啊 啊
#23
饿饿,,
原来05里也有, 08里是默认就给引进来了
但是引完了, 还是没有这个方法a
是不是 08里才有的方法啊 - -!
原来05里也有, 08里是默认就给引进来了
但是引完了, 还是没有这个方法a
是不是 08里才有的方法啊 - -!
#24
.net3.5
把你的vs升级到08吧,简单点
把你的vs升级到08吧,简单点
#25
反射的目标成员aa bb的名字你总该知道吧,筛选一下就行了
#26
users.GetType().GetProperties().select(items=>items.aa&&items.bb);
#27
users.GetType().GetProperties().select(items=>string.format("{0},{1}",items.aa,items.bb)).ToArray()
帮你拼接了,,号分开,aa,bb为一个string的数组
#28
#29
哈哈, 不号意思啊, 这两天没上, 论坛的东西好几天没上了, 不好意思啊,
感谢大家能踊跃的帮忙, 谢谢。
那个问题已经解决了, 不过第二个问题又出来了, 希望大家能帮忙解决一下问题, 最后一个了, 做大家
分就散了, 谢谢。
public static SqlParameter[] addparam(object obj)
{
SqlParameter[] pars = new SqlParameter[obj.GetType().GetProperties().Length];
SqlParameter par = null;
PropertyInfo[] info = obj.GetType().GetProperties();
for (int i = 0; i < pars.Length; i++)
{
//这个地方是动态参数、
par = new SqlParameter("@" + info[i].Name, info[i].PropertyType);
pars[i] = par;
pars[i].Value = info[i].GetValue(obj,null);
}
return pars;
}
问题来了啊, 我那个动态参数的地方,
如果我用Datetime 类型的, 它没办法自动匹配上,
而且还报错误,
将截断字符串或二进制数据。
语句已终止。
数据库的错误, 貌似是因为类型不匹配, 不知道大家有没有办法, 帮个忙啊, 谢谢了,
我的框架就差最后这一步, 大家一定要帮帮啊, - -!
感谢大家能踊跃的帮忙, 谢谢。
那个问题已经解决了, 不过第二个问题又出来了, 希望大家能帮忙解决一下问题, 最后一个了, 做大家
分就散了, 谢谢。
public static SqlParameter[] addparam(object obj)
{
SqlParameter[] pars = new SqlParameter[obj.GetType().GetProperties().Length];
SqlParameter par = null;
PropertyInfo[] info = obj.GetType().GetProperties();
for (int i = 0; i < pars.Length; i++)
{
//这个地方是动态参数、
par = new SqlParameter("@" + info[i].Name, info[i].PropertyType);
pars[i] = par;
pars[i].Value = info[i].GetValue(obj,null);
}
return pars;
}
问题来了啊, 我那个动态参数的地方,
如果我用Datetime 类型的, 它没办法自动匹配上,
而且还报错误,
将截断字符串或二进制数据。
语句已终止。
数据库的错误, 貌似是因为类型不匹配, 不知道大家有没有办法, 帮个忙啊, 谢谢了,
我的框架就差最后这一步, 大家一定要帮帮啊, - -!
#30
ken die a a a