C# 查找具有特定类型的属性并返回它
我有一个类中的对象(我们称之为C# 查找具有特定类型的属性并返回它,c#,C#,我有一个类中的对象(我们称之为classA),我知道它有另一个类中的属性对象(classB)。如何找到类型为classB的对象并返回它(及其所有值) 我编写了这个函数,用于搜索classA的所有属性,以找到propertyTypeclassB的属性。我可以找到属性,但是我被一个PropertyInfo对象困住了,我真的想要一个classB对象和所有的值 classB tempObject = (classB) classAObject.FindPropertyType("classB"); 功
classA
),我知道它有另一个类中的属性对象(classB
)。如何找到类型为classB
的对象并返回它(及其所有值)
我编写了这个函数,用于搜索classA
的所有属性,以找到propertyTypeclassB
的属性。我可以找到属性,但是我被一个PropertyInfo
对象困住了,我真的想要一个classB
对象和所有的值
classB tempObject = (classB) classAObject.FindPropertyType("classB");
功能:
internal BaseDataObject FindPropertyType(string strMember) {
foreach (PropertyInfo prop in this.GetType().GetProperties())
{
if (prop.PropertyType.Name.ToString().ToLower() == strMember.ToLower())
//This is where it goes wrong!
return (BaseDataObject) prop.GetValue(this,null);
}
return null;
}
prop.GetValue(this,null)
返回父对象(classA
)而不是所需的classB
对象。我已经更新了我的答案以使用泛型,请参阅我以前使用的is
和as
如下所示:
使用。这将使该逻辑更加灵活和可重用:
我们需要在您的内部方法中替换对BaseDataObject
到T
的所有调用,因此我修改了FindPropertyByType:
public class BaseDataObject
{
internal T FindPropertyType<T>(string strMember)
{
var type = this.GetType();
var props = type.GetProperties();
foreach (PropertyInfo prop in props)
{
if (prop.PropertyType.Name.ToString().ToLower() == strMember.ToLower())
//This is where it goes wrong!
return (T)prop.GetValue(this, null);
}
return default(T);
}
}
此外,这也应该起作用:
var myId = a.FindPropertyType<int>("id");
或者您可以将用作
关键字(),如果对象是您正在铸造的对象,则该关键字将返回null:
private classB getPropAsClassB(someProperty)
{
return someProperty as classB;
}
var myProp = getPropAsClassB(someProp); //will be null if it isn't a classB object
我已经更新了我的答案,以使用泛型,请参见我以前使用的
is
和as
,如下所示:
使用。这将使该逻辑更加灵活和可重用:
我们需要在您的内部方法中替换对BaseDataObject
到T
的所有调用,因此我修改了FindPropertyByType:
public class BaseDataObject
{
internal T FindPropertyType<T>(string strMember)
{
var type = this.GetType();
var props = type.GetProperties();
foreach (PropertyInfo prop in props)
{
if (prop.PropertyType.Name.ToString().ToLower() == strMember.ToLower())
//This is where it goes wrong!
return (T)prop.GetValue(this, null);
}
return default(T);
}
}
此外,这也应该起作用:
var myId = a.FindPropertyType<int>("id");
或者您可以将用作
关键字(),如果对象是您正在铸造的对象,则该关键字将返回null:
private classB getPropAsClassB(someProperty)
{
return someProperty as classB;
}
var myProp = getPropAsClassB(someProp); //will be null if it isn't a classB object
假设您有一个对象列表:
List<object> objects; // all types of objects here include classA, int, string etc
如果对象不包含ClassA的任何实例,当我们尝试访问“subItem”属性时,这将引发Nullreference异常…假设您有对象列表:
List<object> objects; // all types of objects here include classA, int, string etc
如果对象不包含ClassA的任何实例,当我们尝试访问“subItem”属性时,这将引发Nullreference异常…是否继承
(BaseDataObject)
?@YuvalItzchakov yes,classA
和classB
都继承自absrac类BaseDataObject
@CodeCaster:我没有得到classB
对象。我返回了原始的classA
对象。从描述中看非常不清楚。请给出一个实际的编译示例,并正确解释问题。此代码不会像您声称的那样返回包含类(即This
),而是返回找到的属性值。您知道您正在查询类型名称并使用成员名称调用它吗?同样,请创建一个正确编译和演示问题的示例。ClassB
是否继承(BaseDataObject)
?@YuvalItzchakov是的,classA
和ClassB
都继承自abstrac类BaseDataObject
@CodeCaster:我没有得到ClassB
对象。我返回了原始的classA
对象。从描述中看非常不清楚。请给出一个实际的编译示例,并正确解释问题。此代码不会像您声称的那样返回包含类(即This
),而是返回找到的属性值。您知道您正在查询类型名称并使用成员名称调用它吗?同样,请创建一个正确编译和演示问题的示例。谢谢,我添加了一些信息。我可以找到正确的对象,但我不能返回它。我需要classB
中的对象(及其值),我只得到了PropertyInfo
object atm。谢谢,我添加了一些信息。我可以找到正确的对象,但我不能返回它。我需要classB
中的对象(及其值),我只得到PropertyInfo
object atm。