gpt4 book ai didi

c# - 查找具有特定类型的属性并将其返回

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:43 25 4
gpt4 key购买 nike

我有一个类的对象(我们称它为classA),我知道它有一个来自另一个类的属性对象(classB)。如何找到类型为 classB 的对象并返回它(及其所有值)?

//classA:

int id;
string name;
classB subItem;

//classB:

int randomNumber;
string answerOfLife;

我编写了这个函数,用于搜索 classA 的所有属性以查找具有 propertyType classB 的属性。我可以找到该属性,但后来我遇到了 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 对象。

最佳答案

我已经更新了我的答案以使用泛型,请参阅我之前对 isas 的使用,之前已投票:

使用Generics .它将使这个逻辑更加灵活和可重用:

我们需要在您的内部方法中将对 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);
}

}

default(T) 将返回 T 类型的默认值,在您的情况下为 Null。

现在,无论何时您需要此方法,您都可以指定所需的类型,如下所示:

B tempObject = a.FindPropertyType<B>("B");

此外,这也应该有效:

var myId = a.FindPropertyType<int>("id");

下面是上一个答案

如果我没看错你的问题,你可以使用 is 关键字 ( MSDN Doc )

if( someProperty is classB)
//do something
else
//do something different

或者您可以使用 as 关键字 ( MSDN doc ),如果对象是您要转换的对象,它将返回 null:

private classB getPropAsClassB(someProperty)
{
return someProperty as classB;
}

var myProp = getPropAsClassB(someProp); //will be null if it isn't a classB object

关于c# - 查找具有特定类型的属性并将其返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31656348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com