Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取另一个对象的对象类型';C#中的s属性?_C#_Asp.net Core_.net Core - Fatal编程技术网

如何获取另一个对象的对象类型';C#中的s属性?

如何获取另一个对象的对象类型';C#中的s属性?,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,假设我们有以下两个类的定义: 公共类父类 { 公共子类[]子类{get;set;} } 公营儿童班 { 公共int Id{get;set;} } 我们可以使用System.Type迭代ParentClass的属性,但是我在dotnetcore中找不到一种方法来确定Children的非数组类型,即ChildClass。例如,我想让下面这样的测试始终通过: Type childType=GetChildTypeOf(typeof(ParentClass)); True(childType==typ

假设我们有以下两个类的定义:

公共类父类
{
公共子类[]子类{get;set;}
}
公营儿童班
{
公共int Id{get;set;}
}
我们可以使用
System.Type
迭代
ParentClass
的属性,但是我在dotnetcore中找不到一种方法来确定
Children
的非数组类型,即
ChildClass
。例如,我想让下面这样的测试始终通过:

Type childType=GetChildTypeOf(typeof(ParentClass));
True(childType==typeof(ChildClass));

在这种情况下,应该如何实现
GetChildTypeOf(…)

考虑到可能有多个属性,
GetChildTypeOf
更好地返回
列表
对象

private静态列表GetChildTypeOf(父类型)
{
var res=新列表();
var props=parent.GetProperties();
foreach(道具中的var道具)
{
var propType=prop.PropertyType;
var elementType=propType.GetElementType();
res.Add(elementType);
}
返回res;
}
然后你提出你的主张:

var childType=GetChildTypeOf(typeof(ParentClass));
Assert.True(childType.First()==typeof(ChildClass));
也许最好有一个方法来返回它们,还有一个方法通过给定的属性名返回子类型元素

编辑:以下是它应该如何查找特定属性名称:

private静态类型GetSpecificChildTypeOf(类型parent,字符串propertyName)
{
var propType=typeof(ParentClass).GetProperty(propertyName).PropertyType;
var elementType=propType.GetElementType();
返回元素类型;
}
然后像这样使用它:

var childType=GetSpecificChildTypeOf(typeof(ParentClass),“Children”);
Assert.True(childType==typeof(ChildClass))

编辑:谢谢你批改答案

考虑到可能有多个属性,
GetChildTypeOf
更好地返回
列表
对象

private静态列表GetChildTypeOf(父类型)
{
var res=新列表();
var props=parent.GetProperties();
foreach(道具中的var道具)
{
var propType=prop.PropertyType;
var elementType=propType.GetElementType();
res.Add(elementType);
}
返回res;
}
然后你提出你的主张:

var childType=GetChildTypeOf(typeof(ParentClass));
Assert.True(childType.First()==typeof(ChildClass));
也许最好有一个方法来返回它们,还有一个方法通过给定的属性名返回子类型元素

编辑:以下是它应该如何查找特定属性名称:

private静态类型GetSpecificChildTypeOf(类型parent,字符串propertyName)
{
var propType=typeof(ParentClass).GetProperty(propertyName).PropertyType;
var elementType=propType.GetElementType();
返回元素类型;
}
然后像这样使用它:

var childType=GetSpecificChildTypeOf(typeof(ParentClass),“Children”);
Assert.True(childType==typeof(ChildClass))

编辑:谢谢你批改答案

你已经试过什么了?请用您当前正在使用的代码编辑您的问题,并且遇到问题。我正在寻找一种通用的方法来实现这一目标。这两个类只是表达我想法的一个例子。如果这个类有多个属性呢?那你认为哪个是“孩子”呢?你试着实现<代码> GED HealType Obj/<代码>吗?您提到您有代码迭代父类的属性,但是您能在问题中说明这一点吗?您已经尝试了什么?请用您当前正在使用的代码编辑您的问题,并且遇到问题。我正在寻找一种通用的方法来实现这一目标。这两个类只是表达我想法的一个例子。如果这个类有多个属性呢?那你认为哪个是“孩子”呢?你试着实现<代码> GED HealType Obj/<代码>吗?您提到您有代码迭代父类的属性,但您能在问题中说明这一点吗?这个答案展示了我一直在寻找的更通用的解决方案。这个答案展示了我一直在寻找的更通用的解决方案。