C# 将字节、UInt16和UInt32数据类型分配给C中的对象数据类型#
根据link,对象数据类型可以指向任何数据类型。但是,我在执行此操作时出错。我的代码如下C# 将字节、UInt16和UInt32数据类型分配给C中的对象数据类型#,c#,C#,根据link,对象数据类型可以指向任何数据类型。但是,我在执行此操作时出错。我的代码如下 public bool Write(Object[] data, UInt32 numData) { // Code } 测试写入API的代码如下: byte[] writeBuffer = new byte[256]; Random rnd = new Random(); UInt32 size = 256; rnd.NextBytes(writeBuffer); data.Write(write
public bool Write(Object[] data, UInt32 numData)
{
// Code
}
测试写入API的代码如下:
byte[] writeBuffer = new byte[256];
Random rnd = new Random();
UInt32 size = 256;
rnd.NextBytes(writeBuffer);
data.Write(writeBuffer, size);
这里,writeBuffer是字节数组,但也可以是UInt16或UInt32数组。我在数据中遇到错误。请写入行,说明存在无效参数
请让我知道问题是什么
编辑1:
我的应用程序提供了一个“写”API,可以采用字节、UInt16或UInt32类型的数组。根据数据类型(在创建对象时设置),API在内部将UInt16和UInt32转换为字节数组,并将其传递到底层。顺便说一下,这是.NET微框架,其中API下面的层是本机C++代码。
谢谢。您需要将字节[]强制转换为对象数组,如:
writeBuffer.Select(c=>(object)c).ToArray()
请注意,这称为“装箱”,会导致性能损失,如果可能,请继续使用字节[]。您需要将字节[]强制转换为对象数组,如:
writeBuffer.Select(c=>(object)c).ToArray()
请注意,这称为“装箱”,会导致性能损失,如果可能,请继续使用字节[]。您需要将字节[]强制转换为对象数组,如:
writeBuffer.Select(c=>(object)c).ToArray()
请注意,这称为“装箱”,会导致性能损失,如果可能,请继续使用字节[]。您需要将字节[]强制转换为对象数组,如:
writeBuffer.Select(c=>(object)c).ToArray()
请注意,这称为“装箱”,将导致性能损失,如果可能,请继续使用字节[]。通过对写入使用以下通用定义来避免装箱惩罚:
public bool Write<T>(T[] data, UInt32 size) {
// Code
}
data.Write(writeBuffer, size);
在大多数情况下,如上所述,C#编译器将能够自动确定要为T推断的正确类型,尽管您可以在调用过程中随时指定它,如有必要:
UInt32[] uint32Array;
// :
data.Write<UInt32>(uint32Array, (UInt32)uint32Array.Count());
UInt32[]UInt32阵列;
// :
Write(uint32Array,(UInt32)uint32Array.Count();
通过使用以下写入的通用定义来避免装箱惩罚:
public bool Write<T>(T[] data, UInt32 size) {
// Code
}
data.Write(writeBuffer, size);
在大多数情况下,如上所述,C#编译器将能够自动确定要为T推断的正确类型,尽管您可以在调用过程中随时指定它,如有必要:
UInt32[] uint32Array;
// :
data.Write<UInt32>(uint32Array, (UInt32)uint32Array.Count());
UInt32[]UInt32阵列;
// :
Write(uint32Array,(UInt32)uint32Array.Count();
通过使用以下写入的通用定义来避免装箱惩罚:
public bool Write<T>(T[] data, UInt32 size) {
// Code
}
data.Write(writeBuffer, size);
在大多数情况下,如上所述,C#编译器将能够自动确定要为T推断的正确类型,尽管您可以在调用过程中随时指定它,如有必要:
UInt32[] uint32Array;
// :
data.Write<UInt32>(uint32Array, (UInt32)uint32Array.Count());
UInt32[]UInt32阵列;
// :
Write(uint32Array,(UInt32)uint32Array.Count();
通过使用以下写入的通用定义来避免装箱惩罚:
public bool Write<T>(T[] data, UInt32 size) {
// Code
}
data.Write(writeBuffer, size);
在大多数情况下,如上所述,C#编译器将能够自动确定要为T推断的正确类型,尽管您可以在调用过程中随时指定它,如有必要:
UInt32[] uint32Array;
// :
data.Write<UInt32>(uint32Array, (UInt32)uint32Array.Count());
UInt32[]UInt32阵列;
// :
Write(uint32Array,(UInt32)uint32Array.Count();
没有任何东西“指向”那里的任何东西,没有涉及到指针,大多数(不是所有)类型继承自对象,但这并不意味着某个数组继承自对象数组,它只是意味着对象数组中的元素可以是任何东西
.Write需要一个对象数组,而您正在传入一个字节数组,它将不起作用。您必须将元素设置为1乘1(因为单个字节是一个对象,所以它可以存储在对象[]中)
然而,当我回答这个问题时,问题本身可能隐藏了一些糟糕的设计,你为什么要这么做?您能否向我们展示您的功能用例,以便我们提出替代方案?大多数情况下,如果您直接处理对象或对象集合,您就做错了。没有任何东西“指向”那里的任何东西,没有涉及指针,大多数(不是所有)类型都继承自对象,但这并不意味着某个数组继承自对象数组,它只是意味着对象数组中的元素可以是任何东西
.Write需要一个对象数组,而您正在传入一个字节数组,它将不起作用。您必须将元素设置为1乘1(因为单个字节是一个对象,所以它可以存储在对象[]中)
然而,当我回答这个问题时,问题本身可能隐藏了一些糟糕的设计,你为什么要这么做?您能否向我们展示您的功能用例,以便我们提出替代方案?大多数情况下,如果您直接处理对象或对象集合,您就做错了。没有任何东西“指向”那里的任何东西,没有涉及指针,大多数(不是所有)类型都继承自对象,但这并不意味着某个数组继承自对象数组,它只是意味着对象数组中的元素可以是任何东西
.Write需要一个对象数组,而您正在传入一个字节数组,它将不起作用。您必须将元素设置为1乘1(因为单个字节是一个对象,所以它可以存储在对象[]中)
然而,当我回答这个问题时,问题本身可能隐藏了一些糟糕的设计,你为什么要这么做?您能否向我们展示您的功能用例,以便我们提出替代方案?大多数情况下,如果您直接处理对象或对象集合,您就做错了。没有任何东西“指向”那里的任何东西,没有涉及指针,大多数(不是所有)类型都继承自对象,但这并不意味着某个数组继承自对象数组,它只是意味着对象数组中的元素可以是任何东西
.Write需要一个对象数组,而您正在传入一个字节数组,它将不起作用。您必须将元素设置为1乘1(因为单个字节是一个对象,所以它可以存储在对象[]中)
然而,当我回答这个问题时,问题本身可能隐藏了一些糟糕的设计,你为什么要这么做?你能给我们展示一下你的功能用例吗