作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有这样的功能,这个功能就在 H264 视频解码的 ITU 之外:
Clip3(x, y, z)
{
if (z < x) return x;
else if (z > y) return y;
else return z;
}
在 ITU 文档中,伪代码被列为 sans-data 类型,本质上暗示任何数字数据类型。可以是 byte、int、uint、double、float 等等。
这可以编译,但它是 2020 年的最佳解决方案吗?
dynamic Clip3(dynamic x, dynamic y, dynamic z)
{
if (z < x) return x;
else if (z > y) return y;
else return z;
}
看看在 VS2019 Community 的 Immediate Window 中第一次运行时发生了什么:
(uint)AVC.AVCChunk.Clip3((uint)1, (uint)2, (uint)3)
error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.Convert'
Convert.ToUInt32(AVC.AVCChunk.Clip3((uint)1, (uint)2, (uint)3))
error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
Convert.ToUInt32(AVC.AVCChunk.Clip3(1, 2, 3))
error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
AVC.AVCChunk.Clip3(1, 2, 3)
2
(uint)AVC.AVCChunk.Clip3(1, 2, 3)
2
可以这么说,我对在生产中使用这种方法有点谨慎。有没有更好的选择?
最佳答案
可以约束泛型参数T
至 IComparable<T>
,并使用 CompareTo
, 而不是 <
和 >
运营商:
T Clip3<T>(T x, T y, T z) where T: IComparable<T>
{
if (z.CompareTo(x) < 0) return x;
else if (z.CompareTo(y) > 0) return y;
else return z;
}
关于可比较类型的 C# 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63369442/
我是一名优秀的程序员,十分优秀!