Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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# 使用反射动态转换对象_C#_Reflection - Fatal编程技术网

C# 使用反射动态转换对象

C# 使用反射动态转换对象,c#,reflection,C#,Reflection,我有一个不同类型的对象列表,根据它们的类型,我需要对它们执行不同的操作。具体地说,其中两种类型共享一个方法,我想对它们中的任何一种使用该方法。我目前正在尝试的是: if (foo is Type01 || foo is Type02) { Type tempType = foo.GetType(); outList.Add((foo as tempType).ToOutType()); return outList; } 但是,这不起作用,因为编译器显然无法动态使用该类

我有一个不同类型的对象列表,根据它们的类型,我需要对它们执行不同的操作。具体地说,其中两种类型共享一个方法,我想对它们中的任何一种使用该方法。我目前正在尝试的是:

if (foo is Type01 || foo is Type02) {
    Type tempType = foo.GetType();
    outList.Add((foo as tempType).ToOutType());
    return outList;
}

但是,这不起作用,因为编译器显然无法动态使用该类型。有没有办法实现这一点,或者我必须将这两个选项放在不同的if子句中?

如果您同时控制
Type01
Type02
,则要救援的接口:

interface ISupportToOutType
{
    OutType ToOutType();
}

class Type01 : ISupportToOutType
{        
}

class Type02 : ISupportToOutType
{        
}

var toOutType = foo as ISupportToOutType;
if(toOutType != null)
{
    outList.Add(toOutType.ToOutType());
}

如果同时控制
Type01
Type02
,则救援界面:

interface ISupportToOutType
{
    OutType ToOutType();
}

class Type01 : ISupportToOutType
{        
}

class Type02 : ISupportToOutType
{        
}

var toOutType = foo as ISupportToOutType;
if(toOutType != null)
{
    outList.Add(toOutType.ToOutType());
}

尝试使用Activator该方法对这两种类型执行相同的操作吗?您能否从具有此方法(至少作为虚拟方法)的公共基中对类型进行子类化?或者将该方法放在两个类都实现的接口中?尝试使用Activator该方法在两种类型上做相同的事情吗?您能否从具有此方法(至少作为虚拟方法)的公共基中对类型进行子类化?或者将方法放在两个类都实现的接口中?