C# 是否可以传递空平台::数组<;uint8>;变成事件委托?

C# 是否可以传递空平台::数组<;uint8>;变成事件委托?,c#,c++-cx,C#,C++ Cx,我正在使用C++-CX为WindowsPhone8编写一个windows运行时组件(并使用C#中的组件) 在Cx端,我正在构建一些Platform::Array对象,并尝试使用事件/委托将它们传递回C端 当数组不为空时,此操作可以正常工作,例如: public delegate void DataReceivedFunction(const Array<uint8>^ a, const Array<uint8>^ b); ... // public member even

我正在使用C++-CX为WindowsPhone8编写一个windows运行时组件(并使用C#中的组件)

在Cx端,我正在构建一些
Platform::Array
对象,并尝试使用事件/委托将它们传递回C端

当数组不为空时,此操作可以正常工作,例如:

public delegate void DataReceivedFunction(const Array<uint8>^ a, const Array<uint8>^ b);
...
// public member
event DataReceivedFunction^ DataReceivedEvent;

...
// Inside some function
// Build a byte array with 5 elements
Array<uint8>^ five = ref new Array<uint8>(5);

// Build an empty array
Array<uint8>^ empty = ref new Array<uint8>(0);

DataReceivedEvent(five, empty);
public委托void DataReceivedFunction(常量数组^a,常量数组^b);
...
//公职人员
事件DataReceivedFunction^DataReceivedEvent;
...
//在某些函数中
//构建一个包含5个元素的字节数组
数组^5=参考新数组(5);
//构建一个空数组
数组^empty=ref新数组(0);
DataReceivedEvent(五个,空);
通过代码单步执行,空数组成功创建,长度为零,因此在传递给DataReceivedEvent时不为null

但是在C端,空数组不是
字节[0]
,而是
null
。另一个数组的工作方式与您预期的相同

我猜Cx层是智能的,并假设它可以释放这个对象,因为它不包含任何字节?有没有人有这方面的经验


(当然,它可以在C#端工作,但作为一项规则,我不喜欢返回
null
对象,而空对象就可以了。)

是否存在将空数组从C++/CX传递到C#的实际用例,或者只是您感兴趣的事情?我同意你的说法,C++/CX正在清空对象,因为它是空的。在设计SDK时,我宁愿将空字节数组传递给用户,也不愿传递空引用。可以说这是一种风格上的选择,但这就是我们的SDK在其他平台(如objC、java、javascript)上的表现。原因是用户代码不需要显式检查空值,如果您的代码在数组上循环,它将不会执行任何操作,因为数组长度已经为零。如果您有转换为字符串的代码,它将生成一个空字符串,而不是由于空指针引用而崩溃,等等。无论这种行为是否可取,如果有人能向我指出任何文档,那就太好了,因为我找不到它,我不想在某种程度上依赖于未记录的行为!