![]() |
1
10
这里有一种方法可以解决你的问题。创建通用方法:
这样,C的编译器就可以插入必要的装箱(如果有的话)来转换
|
![]() |
2
3
原始代码只能用于引用类型。这就是为什么字符串不是问题的原因,它直接从System.Object派生。值类型是从值类型和对象派生的,这在纸面上是一种很好的假象,但实际上需要代码。C编译器自动发出该代码,它需要装箱转换。这是这里缺少的部分,没有从int到object的运行时转换 BOX opcode . 您可以在代码中获得该操作码,但必须使用System.Reflection.Emit。 在你去那里之前,先检查一下你现在的速度是否真的太慢了。反射的开销是从程序集中挖掘元数据。这是在创建委托时完成的,然后缓存类型信息。 |
![]() |
3
2
调用失败,因为需要的对象不是值类型(如int)——显然
通过使用反射发射类,可以创建动态方法并将其保存为委托,或者创建动态委托并将其保存在某些结构中。您只能这样做一次(可能每个运行时一次),将它存储在某个dict中,并在需要时调用。 希望有帮助。 卢克 |
![]() |
4
0
您是否可以将泛型方法限制为仅使用引用类型,并创建另一个方法来仅使用值类型,并相应地决定使用哪个功能? |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |