class
Program
{
static
void
Main(string[]
args)
{
string
path
=
@"D:\OpenSSL";
//
ConsoleWriteLine(isDir(path));
//ConsoleRead();
Man
man
=
new
Man();
Type
type
=
manGetType();
PropertyInfo[]
infos
=
typeGetProperties();
foreach
(PropertyInfo
info
in
infos)
{
ConsoleWriteLine(infoDeclaringTypeFullName
+
"
,
"
+
infoName);
}
ConsoleRead();
}
}
public
class
Person
{
public
string
name
{
get;
set;
}
public
string
password
{
get;
set;
}
}
public
class
Man
:
Person
{
public
string
height
{
get;
set;
}
public
string
weight
{
get;
set;
}
}
比较笨的办法。
肯定有更优解决方案。
那就需要利用扩展方法,现将T的Type获取到,方法如下:
public static class Extensions
{
public static Type GetListItemType<T>(this IList<T> list)
{
return typeof(T);
}
}
请注意看异常信息。未能从“当前”程序集获取“外部”程序集中拥有指定完整限定名的类型。
事实上,直接使用TypeGetType()会从当前程序集,也就是"test3"程序集中查找。
想要查找NHapiModelV23程序集中的类型,请在该程序集上使用GetType
Assembly asmNHapi=AssemblyLoadFrom();Type outerType=asmNHapiGetType();
如果想尽量少的改动自己的代码也成,直接在你的var classes上进行linq查询就好。
Type[] classes=AssemblyLoadFrom()GetTypes();Type tt=classesFirstOrDefault(t=>tFullName="NHapiModelV23GroupORM_001_"+properties[i]);
if(tt!=null)
DoSomething();
最后提醒,请勿使用AssemblyLoad方法,因为该方法已被弃用,请使用LoadFrom和LoadFile来加载外部程序集。
此外,类型的完全限定名和短名并不影响类型的搜索。使用GetType时会从根命名空间开始一层一层查找的,如果各层命名空间下没有重名的类,你甚至没有使用完全限定名的必要。比如上面的代码里可以使用短名进行查找。
Type tt=classesFirstOrDefault(t=>tName="ORM_001_"+properties[i]);刚看到上面的回答,这里我要肯定的告诉你,不管你是用文件方式还是项目引用方式,都不可能使用TypeGetType静态方法获取另一个程序集中的类型,必须在对方的程序集上进行查找!
如果你非要使用TypeGetType静态方法获取其他程序集中的类型,可以使用其的一种重载:
public static SystemType GetType(string typeName, SystemFunc<AssemblyName,Assembly> assemblyResolver, SystemFunc<Assembly,string,bool,Type> typeResolver)该静态方法要求你提供自己的程序集名称解析器和类型名称解析器,非特殊情况不推荐使用。该方法是为了在多个程序集中同时查找多个类型而被微软提供的。
以上就是关于C# 反射获取属性的时候如何只获取该类的属性,我不想取得父类的属性。全部的内容,包括:C# 反射获取属性的时候如何只获取该类的属性,我不想取得父类的属性。、怎么通过反射获得实体类中List类型的对象的各个属性、C#通过反射获取不同命名空间下的类(属性和方法)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)