gpt4 book ai didi

c# - 如何使用 C# 泛型代替字符串和字节[]

转载 作者:太空狗 更新时间:2023-10-30 00:04:15 27 4
gpt4 key购买 nike

是否可以使用 C# 泛型将这 4 个例程替换为一个例程?

int memcmp (string a, string b){...}
int memcmp (string a, byte[] b){...}
int memcmp (byte[]a, string b){...}
int memcmp (byte[]a, byte[] b){...}

我尝试了多种变体,但无法确定确切使用什么...

例如……

int memcmp<A, B>( A a, B b) 
{
if ( a.Length < b.Length ) return 1;
for ( int i = 0 ; i < a.Length ; i++ )
{
if ( a[i] != b[i] ) return ( a[i] < b[i] ) ? -1 : 1;
}
}

出现以下错误:

  • “A”不包含“长度”的定义
  • 不能将带有 [] 的索引应用于类型“A”的表达式

哪里有讨论这个的好的引用资料?

**注意:**我不是在寻找关于如何比较字符串和字节的解决方案,而是在寻求使用“概念验证”问题了解泛型在 C# 中的工作方式

最佳答案

您理想的解决方案应具有以下签名:

int memcmp<T>( T a, T b ) where T : IHasLengthAndIndexer

其中 IHasLengthAndIndexer 定义为:

public interface IHasLengthAndIndexer
{
int Length { get; }
byte this[ int index ] { get; }
}

然后您可以传入任何类型,假设该类型实现了 IHasLengthAndIndexer

但是您不能更改byte[]string 的接口(interface),因此该解决方案不会替代您的四种方法。

但是,您可以创建自己的类,该类具有来自 byte[]string 的隐式运算符,并创建一个比较该类实例的方法,但那不是'使用泛型。

关于c# - 如何使用 C# 泛型代替字符串和字节[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215011/

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