使用在运行时确定的类型参数调用generics函数
我有一个问题涉及使用在运行时已知的类型参数调用类的generics方法。
具体来说,代码如下所示:
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(); }
Read()函数如下所示:
public T Read() where T : struct
该函数的目的是返回从字节数组中读取的数据。
有没有办法像运行这样在运行时调用generics方法?
处理此问题的最简单方法是使用单个Type参数进行Read函数的非generics重载:
public object Read(Type t)
然后让通用版本调用非generics版本:
public T Read() where T : struct { return (T)Read(typeof(T)) }
您需要构建一个methodinfo并调用Read方法:
MethodInfo method = typeof(DataStream).GetMethod("Read"); MethodInfo generic = method.MakeGenericMethod(fieldType); object objData = generic.Invoke(ds, null);
走Lee的路线可能会更好。 Generic是设计时的简写,使您不必为许多不同类型的类编写公共代码。 在编译时,对generics方法或类的每次调用基本上都是作为一个完全独立的类生成的。
更简单的方法就是对类型进行低音并使用reflection,这是你不得不做的事情。
上述就是C#学习教程:使用在运行时确定的类型参数调用generics函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/958191.html