C# 无法向下转换和实例化自定义对象

C# 无法向下转换和实例化自定义对象,c#,casting,activator,C#,Casting,Activator,我不能 (1) 检查自定义对象是否属于特定类型,并且 (2) 实例化“向下浇铸”对象 我有: public class MyObject<Type> // --> i require this "<Type>" form somewhere else, so not possible to change it { public string A { get; set; } public string B { get; set; } } public

我不能
(1) 检查自定义对象是否属于特定类型,并且
(2) 实例化“向下浇铸”对象

我有:

public class MyObject<Type> // --> i require this "<Type>" form somewhere else, so not possible to change it
{
    public string A { get; set; }
    public string B { get; set; }
}

public class MyClass : MyBaseClass
{
    public MyObject<string> Prop1 { get; set; }
    public MyObject<int> Prop2 { get; set; }
    public MyObject<long> Prop3 { get; set; }
}

public class MyBaseClass
{
    ....

    PropertyInfo[] props = this.GetType().GetProperties();
    foreach (PropertyInfo prop in props) 
    {
       if(prop.PropertyType is MyObject<Type>) // --> (1) this does not work
       {
          var o = (MyObject<Type>)Activator.CreateInstance(prop.PropertyType); // (2) this does not work
          o.A = "test1";
          o.B = "test2";
          prop?.SetValue(this, o);
       }
    }

    ....        
}
public class MyObject/-->我在其他地方需要此“”表单,因此无法更改它
{
公共字符串A{get;set;}
公共字符串B{get;set;}
}
公共类MyClass:MyBaseClass
{
公共MyObject Prop1{get;set;}
公共MyObject Prop2{get;set;}
公共MyObject Prop3{get;set;}
}
公共类MyBaseClass
{
....
PropertyInfo[]props=this.GetType().GetProperties();
foreach(PropertyInfo props in props)
{
如果(prop.PropertyType为MyObject)/-->(1)则此操作无效
{
var o=(MyObject)Activator.CreateInstance(prop.PropertyType);/(2)这不起作用
o、 A=“test1”;
o、 B=“test2”;
prop?.SetValue(本,o);
}
}
....        
}
我主要想实现的是,根据声明的类型动态设置MyObject的属性A和B。因此,我需要使用反射来发现属性和类型,实例化和设置属性

有人能帮我解决这些问题吗

提前感谢,

希望我答对了:

用于检查属性是否属于泛型类型(!):按如下方式执行


对于激活实例:使用Activator.CreateInstance(prop.PropertyType)

使用
MyBaseClass
您想要实现什么?您确定反射是您试图解决的任何问题的正确解决方案吗?在语句
(MyObject)Activator.CreateInstance(type)
中,确保
type
不引用类,而是类或方法的类型参数。@John,现在只是学习的问题…@Ackdari,任何例子,请?@p.j.smith作为我在Ronalds下评论的后续回答:您应该在问题中添加编译器错误消息,并添加保存代码的方法的签名。同样对于一些命名:泛型类型的类型参数应始终以
T
开头,可选后接一些名称,如
TKey
TValue
TResult
,等等。这样就不会将名称与实际类型混淆;使用
var o=Activator.CreateInstance(prop.PropertyType)
创建类型为
prop.PropertyType
对象,而不是
MyObject
的实例,这就是为什么我试图将其转换为管理访问属性
o.A
o.B
。。。如果像我的问题一样将其强制转换为
(MyObject)
,则不会显示错误,但在编译时会抛出错误:
System.InvalidCastException:“无法将类型为“xxx.MyObject'1[MyClass]”的对象强制转换为类型为“xxx.MyObject'1[System.type]”
@p.j.smith“
System.InvalidCastException:“无法强制转换类型为“xxx.MyObject'1[MyClass]的对象”'键入'xxx.MyObject'1[System.type]'
“这正是我试图警告您的。编译器认为
Type
是类。因此,您想将类型为
MyObject
的对象强制转换为
MyObject
,这是不可能的。@阿克达里,是的,我理解了,但还没有解决它。。。有什么提示吗?