Csharp/C#教程:以类型通用/不可知方式实现generics方法的最佳方法分享


以类型通用/不可知方式实现generics方法的最佳方法

假设我们有一个带有这种签名的generics方法:

T Obfuscate(T value) where T : IConvertible 

我正在为IConvertible设置类型约束,所以这个方法可以消化简单的值类型以及字符串。 让我们忘记一下,也可以提供枚举……

我想避免这样的实现,它将检查实际的参数类型以执行正确的处理。

 // Please no GOD METHODS public T Obfuscate(T value) where T : IConvertible { if (value is int) { ... } if (value is string) { ... } } 

这肯定是工厂方法的气味,必须调用特定的实现提供程序,但仍然需要进行类型检查。

对于这种情况,您认为最好的(希望是通用方法)是什么?

为什么是通用方法?

我决定使用generics方法,因此它总是返回正确的类型,而不需要在调用代码时强制转换方法。

如你所说,你必须对某些描述进行类型检查。 但是,您可以轻松地将其分解为更小的方法,甚至可以使用开放注册方案:

上述就是C#学习教程:以类型通用/不可知方式实现generics方法的最佳方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 private readonly Dictionary obfuscators = new Dictionary; // Alternatively, register appropriate obfuscators on construction. public void RegisterConverter(Func obfuscator) { obfuscators[typeof(T)] = obfuscator; } public T Obfuscate(T value) { Delegate obfuscator; if (obfuscators.TryGetValue(typeof(T), out obfuscator) { // We know it'll be the right type... var realObfuscator = (Func) obfuscator; return realObfuscator(value); } // ??? Throw exception? Return the original value? } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1037477.html

(0)
上一篇 2022年1月25日
下一篇 2022年1月25日

精彩推荐