无法转换类型';T';发出嘘声
本文关键字:嘘声 转换 类型 | 更新日期: 2023-09-27 18:21:59
基本上,我在代码以粗体显示的地方遇到了这些错误:
Cannot convert type 'T' to bool
Cannot convert type 'T' to string x2
Cannot convert type 'T' to byte[]
Cannot convert type 'T' to byte
我一直在谷歌上寻找,似乎找不到解决这个问题的方法,提前感谢
public void Append<T>(T value, bool littleEndian = false)
{
try
{
System.Type t = typeof(T);
if (!this.IsValidType(t))
{
throw new Exception("msg_t.AppendMessage: Invalid type!");
}
if (t == typeof(bool))
{
((XDevkit.IXboxConsole) this.XboxConsole).WriteInt32(this.DataBuffer + this.MessageLength, ***((bool) value)*** ? 1 : 0);
this.MessageLength += 4;
}
else if (t == typeof(string))
{
((XDevkit.IXboxConsole) this.XboxConsole).WriteString(this.DataBuffer + this.MessageLength, ***(string) value)***;
this.MessageLength += (uint) Encoding.UTF8.GetBytes(***(string) value)***.Length;
}
else if (t == typeof(byte[]))
{
byte[] data = ***(byte[]) value***;
((XDevkit.IXboxConsole) this.XboxConsole).SetMemory(this.DataBuffer + this.MessageLength, data);
this.MessageLength += (uint) data.Length;
}
else if (t == typeof(byte))
{
((XDevkit.IXboxConsole) this.XboxConsole).WriteByte(this.DataBuffer + this.MessageLength, ***(byte) value***);
this.MessageLength++;
}
else
{
byte[] array = (byte[]) typeof(BitConverter).GetMethod("GetBytes", new System.Type[] { value.GetType() }).Invoke(null, new object[] { value });
if (!littleEndian)
{
Array.Reverse(array);
}
((XDevkit.IXboxConsole) this.XboxConsole).SetMemory(this.DataBuffer + this.MessageLength, array);
this.MessageLength += (uint) array.Length;
}
this.UpdateOverflowedBoolean();
}
catch
{
if (MessageBox.Show("Error when writing stats!", "GHOSTS", MessageBoxButtons.RetryCancel, MessageBoxIcon.Hand) == DialogResult.Retry)
{
this.Append<T>(value, littleEndian);
}
}
}
不幸的是,C#中的泛型转换规则不允许直接这样做,但您可以通过object
。例如:
byte[] data = (byte[]) (object) value;
然而,您可能会考虑,无论如何,将其作为一种通用方法是否真的合适。。。它不像是处理所有类型,或者对接受的所有类型做完全相同的事情。
我还强烈建议提取所有成功案例中使用的表达式((XDevkit.IXboxConsole) this.XboxConsole)
。