Чтобы дать представление о моем требовании, рассмотрим эти классы -
class A { }
class B {
String m_sName;
public String Name {
get { return m_sName; }
set { m_sName = value; }
}
int m_iVal;
public int Val {
get { return m_iVal; }
set { m_iVal = value; }
}
A m_objA;
public A AObject {
get { return m_objA; }
set { m_objA = value; }
}
}
Теперь мне нужно определить классы объектов, передаваемых в функцию
void MyFunc(object obj) {
Type type = obj.GetType();
foreach (PropertyInfo pi in type.GetProperties()) {
if (pi.PropertyType.IsClass) { //I need objects only
if (!type.IsGenericType && type.FullName.ToLower() == "system.string") {
object _obj = pi.GetValue(obj, null);
//do something
}
}
}
}
Мне не нравится этот кусок кода -
if (!type.IsGenericType && type.FullName.ToLower() == "system.string") {
потому что тогда я должен отфильтровать классы, такие как, System.Int16, System.Int32, System.Boolean и т. Д.
Есть ли изящный способ, с помощью которого я могу узнать, принадлежит ли объект определенному мной классу, а не классу, предоставленному системой?