考虑以下函数:
public static bool TryToDoStuff(ReadOnlySpan<byte> input, Span<byte> destination) {
...
}
此函数返回基于input
的内容,是否能够在destination
上“执行操作”。
我想检查input
和destination
“包含”的内存区域是否相交,如果相交,则抛出异常,因为这会破坏input
的数据。我该如何做到这一点(不使用反射或不安全的代码)?
我知道我可以编写一些xmldoc并警告用户参数不应相交,但这是一个贫民解决方案。
编辑:对于那些要求示例的人,Wazner的示例是正确的。
// On arrays
Span<byte> firstArray = new byte[10];
Span<byte> secondArray = new byte[10];
Intersects<byte>(firstArray.Slice(5, 5), firstArray.Slice(3, 5)); // Should throw
Intersects<byte>(firstArray.Slice(5, 5), secondArray.Slice(3, 5)); // Should not throw
// And on stackallocated memory
Span<byte> firstStack = stackalloc byte[10];
Span<byte> secondStack = stackalloc byte[10];
Intersects<byte>(firstStack.Slice(5, 5), firstStack.Slice(3, 5)); // Should throw
Intersects<byte>(firstStack.Slice(5, 5), secondStack.Slice(3, 5)); // Should not throw
Span<T>
实现了方法int32 IndexOfAny(ReadOnlySpan<T> values)
。你尝试过像这样的代码吗?if (destination.IndexOfAny(input) >= 0) throw new IntersectException();
- Michal Šuvadabyte[]
数组,而不进行严重不安全的操作? - Damien_The_Unbeliever