我有一个班级,正在进行一些串口通信。
该类应初始化为byte[]
,char[]
,string
的类型。
该类还提供用于存储传出数据和传入数据的队列
class SerialServices<T>
{
//...
Queue<T> requestDataQueue;
Queue<T> responseDataQueue;
//...
}
将数据写入SerialPort时出现问题:
public override Task SendData()
{
//...
T requestData = requestDataQueue.Dequeue();
if (typeof(T) == typeof(string))
{
this.sp.Write(requestData as string);
}
else
{
this.sp.Write(requestData, 0, requestData.Length);
}
//...
}
requestData.Length
没有编译。
错误:
&#34; T&#34;不包含&#34;长度&#34;的定义。
我甚至不知道在这里使类通用是正确的方法,因为它不是非常通用的......
但我试图避免制造三种不同的超载&#34; string
,byte[]
,char[]
的课程。
去这里的方法是什么?
答案 0 :(得分:1)
正如Hans Passant所说:
它只能处理3种类型时不通用。改为使用方法重载。
一个选项(如果可能)是使用Hans建议的方法重载。只有你可以直接使用传入的参数,而不是需要缓存它们并在以后处理它们时,这才真正可行。
您还可以创建通用基类,并为需要支持的特定类型提供重载。
您的SendData
可能会对byte[]
(ByteSerialServices : SerialServices<byte[]>
)和string
(StringSerialServices : SerialServices<string>
)有不同的实现。