gpt4 book ai didi

可比较类型的 C# 泛型

转载 作者:行者123 更新时间:2023-12-04 01:15:58 24 4
gpt4 key购买 nike

假设我有这样的功能,这个功能就在 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

可以这么说,我对在生产中使用这种方法有点谨慎。有没有更好的选择?

最佳答案

可以约束泛型参数TIComparable<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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com