在运行时创建通用类型,并将其传递给通用方法

时间:2018-10-31 21:28:21

标签: c# generics casting

我正在研究从OutputFormatter继承的类。

在我的WriteResponseBodyAsync方法中,我接受了OutputFormatterWriteContext context,并且需要调用一个以IEnumerable<T> objects作为参数的方法。

我正在使用具有此类方法的第三方库-

public SerializedData Serialize<T>(IEnumerable<T> someObject){...}

我的WriteResponseBodyAsync方法是这样的-

public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
 {
     // need to make a call like the below,
     // but of course, this won't compile because context.Object is not an IEnumerable<T>.
     var serializedData = ThirdParyLibrary.Serialize(context.Object);

     return Task.FromResult(serializedData);
 }

我不知道如何从context.ObjectIEnumberable<T> objects。我尝试了context.Object.GetType()GetGenericTypeDefinition()MakeGenericType(..)的一些变体,但是这些都没有帮助。

是否可以做类似的事情-

var myType = context.Object.GetType().GetGenericArguments()[0]; //this gets the type inside the enumerable I want to return.
IEnumerable<myType> typedObjects = (IEnumerable<myType>) context.Object;

0 个答案:

没有答案