可以';t do(生成System.Type的表达式)对象强制转换
本文关键字:表达式 对象 转换 Type System do 生成 可以 | 更新日期: 2023-09-27 18:21:55
我有一个object[]数组,它包含一些内置类型的混合,如Int/Byte/String,我试图在运行时将对象转换为正确的类型,然后将转换的数据交给具有Write(内置类型重载)方法的第三方库。
我以为我可以只做Obj.Write((产生System.Type的表达式)objArg),但它在我身上出错了。
这里有一个代码示例可以更好地解释它:
object testData = (int)42;
int final = (GetAType())testData;
private Type GetAType()
{
return typeof(Int32);
}
有什么建议吗?实现这一点的其他方法也会有所帮助。
在某种背景下,这是我最初的问题。第三方库,有一堆不同类型的重载。
3rdPartyLibrary.Write(bool source)
3rdPartyLibrary.Write(int16 source)
3rdPartyLibrary.Write(int32 source)
3rdPartyLibrary.Write(string source)
我试图在第三方库和我的代码的其余部分之间抽象一层
Such that I can have
Object[int32]
Object[int16]
Object[string]
Object[int32]
我正在尝试做一些看起来很简单的事情,比如这个(psuedo编码)
loop Object[]
{
3rdPartyLibrary.Write( (object[i].GetType()) object[i] )
}
我一直在读所有听起来类似的问题,看起来这可能不可能?
您正在寻找的内容将毫无意义,因为结果仍然必须为所有操作指定一个类型,并且必须是object
才能处理所有不同的类型。
只需为您支持的类型使用开关:
foreach (object item in Object) {
switch (item.GetType().Name) {
case "System.Int16":
3rdPartyLibrary.Write((Int16)item);
break;
case "System.Int32":
3rdPartyLibrary.Write((Int32)item);
break;
case "System.Boolean":
3rdPartyLibrary.Write((bool)item);
break;
case "System.String":
3rdPartyLibrary.Write((string)item);
break;
default:
throw new ArgumentException("Unhandled type '" + item.GetType().Name + "'.");
}
Cast是编译时构造;不能在强制转换运算符中使用调用的结果。
有两种方法可以解决你的问题。
如果您使用的是.NET4:
3rdPartyLibrary.Write((dynamic)object[i]);
否则,您将不得不使用反射根据参数类型选择正确的重载,然后调用它。