我想扩展System.Array类来做类似的事情:
public static class Extensions
{
public static void Append( this byte[] dst, byte[] src)
{
Array.Resize<byte>(ref dst, dst.Length + src.Length);
Array.Copy(src, 0, dst, dst.Length - src.Length,src.Length);
return;
}
}
但是“这个”不可能被引用......并且在返回时它会在开始时返回。
答案 0 :(得分:4)
如果您的意思是“我可以将扩展方法的第一个参数设为ref
参数吗?”然后答案是否定的,你不能。 (不管怎样,不是在C#中.IIRC,你可以在VB中 - 但我建议反对它。)
来自C#规范的第10.6.9节:
扩展方法的第一个参数除了
this
之外不能有任何修饰符,参数类型不能是指针类型。
您必须改为返回数组:
public static byte[] Append(this byte[] dst, byte[] src)
{
Array.Resize(ref dst, dst.Length + src.Length);
Array.Copy(src, 0, dst, dst.Length - src.Length,src.Length);
return dst;
}
然后将其称为:
foo = foo.Append(bar);
这真的感觉你当时想要一个List<byte>
- 如果你真的要做这样的扩展方法,至少要把它变成通用的:
public static T[] Append<T>(this T[] dst, T[] src)
{
Array.Resize(ref dst, dst.Length + src.Length);
Array.Copy(src, 0, dst, dst.Length - src.Length,src.Length);
return dst;
}
答案 1 :(得分:0)
是的,扩展方法的隐式参数不可能具有ref
修饰符。你正在寻找的是根本不可能的;您需要使用非扩展方法来获取此行为,否则您将需要返回一个新数组而不是修改隐式引用。