Calling a generic function with a type parameter determined at runtime

c#, dynamic, generics, reflection, runtime

Solution

The easiest way to handle this would be to make a non-generic overload of the Read function with a single Type parameter:

public object Read(Type t)

And then have the generic version call the non-generic version:

public T Read<T>() where T : struct
{
    return (T)Read(typeof(T))
}

Problem

I have a question involving calling a class's generic method with a type parameter that is known at runtime. In specific, the code looks like so: ``` FieldInfo[] dataFields = this.GetType().GetFields( BindingFlags.Public | BindingFlags.Instance ); // data is just a byte array used internally in DataStream DataStream ds = new DataStream( data ); foreach ( FieldInfo field in dataFields ) { Type fieldType = field.FieldType; // I want to call this method and pass in the type parameter specified by the field's type object objData = ( object ) ds.Read<fieldType>(); } ``` The Read() function looks like so: ``` public T Read() where T : struct ``` This function's purpose is to return data read from a byte array. Is there any way to call a generic method at runtime like this?

Original source