- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在类定义中,我实现了 IList<T>
使它看起来像一个数组。
// Foo has C++ arrays inside for a
// fast communication with some hardware
public abstract class Foo<T> : IList<T(or uint for a derived class)>
{
public virtual void CopyTo(uint[] array, int arrayIndex)
{
int dL = Length;
if (dL == array.Length)
{
/* needs pinning the target before this?*/
Marshal.Copy(handleForFooUnmanagedArray,
(int[])(object) array,
arrayIndex,
dL - arrayIndex);
return;
}
throw new NotImplementedException();
}
}
所以它现在可以这样做:
uint [] bar = new uint[L];
foo.CopyTo(bar,0);
但现在我想让它像数组一样工作:
uint [] bar = new uint[L];
bar.CopyTo(foo,0);
所以我查看了数组在运行时(here)实现的接口(interface),以找到类似私有(private) .CopyFrom
的东西我认为应该在 `.CopyTo' 中称为 implicity,
这些都没有 .CopyFrom
.
也许有一些IntPtr
属性作为 Marshal
的句柄复制 .CopyTo
但我在智能感知中看不到它。
问题:
我如何找到执行 .CopyTo
的方法?用于获取有关目标数组的必要信息以及那是什么必要信息?另一种方法,如 .CopyFrom
或者指向目标数组开始的句柄,或者存储在某处的一些解释器中间代码?目标数组是否固定在进程中?
附带问题:
我需要在 IList<T>
中实现一些额外的方法吗?在重要的(未知的)之上?
我已经实现了 toArray
, Count
和 []
但我还没有为别人做过任何事。那么Foo
还有Length
(带有自定义界面)但它不属于 Array
所以uint[]
不得在其 CopyTo
中使用它.
我没有使用 IL 的经验,所以我可能不明白这是否是解决方案,但我可以及时回顾。
我还尝试实现 Array,但由于是特殊类而拒绝实现。
非常感谢您的宝贵时间。
最佳答案
CopyTo
由运行时本身在非托管代码中实现,方法签名如下所示:
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable);
如您所见,它仍然需要 Array
而不是某个指针,因此很难按您的意愿行事。
但是,如果您可以在 Foo
中拥有一个托管数组,那么就很容易实现目标 - 只需像这样使用隐式转换为 Array
:
class MyFakeArray {
uint[] _realArray = new uint[10];
public MyFakeArray() {
}
public static implicit operator uint[](MyFakeArray a) {
return a._realArray;
}
}
然后 CopyTo
将按预期工作:
var a = new uint[10];
var fa = new MyFakeArray();
a.CopyTo(fa, 0);
关于c# - 为数组本身实现 `.CopyTo(Array,int)` 作为目标数组(将被复制到),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43009498/
我正在尝试将一个范围从一张纸复制到另一张纸(同时保留公式)。我使用 copyTo 编写了一个简单的脚本: function copyRangeAcrossSheets(source_sheet,sou
我想将文件 c:\a1\b2\c3\foo.txt 复制到 d:\a1\b2\c3\foo.txt。 D 驱动器上不存在子目录,如果我尝试直接执行 CopyTo(),则会出现 IO 异常。我一直没能找
我有以下方法,但出于某种原因,第一次调用 Copy to 似乎什么也没做?有人知道为什么吗?该方法的输入被压缩,如果需要,base64 可以提供该方法。 private byte[] GetFileC
我想知道在 C# 或 VB.NET 中如何使用 ArrayList 的 CopyTo 方法> 对象将其内容复制到其他 ArrayList(不是简单的数组)。 注意:我不是在寻找像 ArrayList
谁能解释为什么这段代码的输出只是“hello”以及这段代码的含义? ( 0, characterArray, 0, characterArray.Length ); 输出显示: The charact
我有一个 WCF 服务,它允许我以 block 的形式上传文件。我想知道的是,这段代码是否会导致上传的流在任何情况下都只能部分附加到目标流? 我的日志显示所有发送的流都是 512000 字节(这是我在
我如何使用 Stream CopyTo不覆盖现有输出文件的方法? public void MergeAndDeleteFiles(string outputFile, IEnumerable inpu
考虑以下代码: var results = searcher.FindAll(); SearchResult[] srList = new SearchResult[results.Count]; r
我快要失去理智了。在过去的一个小时里,我一直试图让 GzipStream 压缩一个字符串,但出于某种原因,它拒绝将整个字节数组写入内存流。起初我认为它与 using 语句有关,但即使在删除它们之后似乎
我正在使用 Java CIFS Client Library但面临的问题是 copyTo 函数不起作用。我有一个包含文件的文件夹。我想将这些文件读取到其他网络路径。 String path1 = "
我有下表: writing_agent_number|agent_name |individual_sub_name -------------------- --------------
我正在尝试将较小的图像复制到较大图像的中心。这是代码: src.copyTo(dest(Rect(50,50,src.cols,src.rows))); src 和 dest 都是 Mats,dest
我尝试过在这个论坛上搜索、阅读文档和谷歌搜索。我找不到问题的答案。 下面简要介绍一下我正在尝试做的事情: 从网络摄像头读取Mat对象frame(在父类OpenCVVideoWorker中声明为私有(p
我正在尝试通过 C++ 在 OpenCV 2.4 中使用蒙版,将较小的图像粘贴到较大的图像中。 在没有 mask 的情况下,我使用以下代码将小图像复制到大图像: smallImage.copyTo(l
我想使用 openCv 的 copyTo() 函数对图像应用蒙版,但蒙版不起作用。我仍然获得相同的图像。 当我在网上搜索时,我看到了一些建议,例如: -源图像和目标图像必须不同, -源图像必须具有 C
TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePix
我正在比较 OpenCL UMat 和 OpenCL Mat,我运行了 cvtColor() 函数 500 次。 int OpenCL_UMat() { Mat img; UMat u
我想合并 2 个大文件但是 atm 我的代码只在复制 1 个文件后更新进度有没有更好的方法来报告进度这是我的复制代码 atm max = files.Count; MessageBox.Show(
我在将数据从 MemoryStream 复制到 ZipArchive 内的 Stream 时遇到问题。以下内容不起作用 - 它仅返回 114 个字节: GetDataAsByteArray(IData
我看到CopyToAsync有 CancellationToken论据。但我不需要CopyToAsync因为我的代码已经在后台线程中执行了。我只想拥有CopyTo重载需要 CancellationTo
我是一名优秀的程序员,十分优秀!