2013-05-22 127 views
2

在我的程序中,我将在运行时得到一个var对象,并且我想将它写入二进制文件,但我无法使用BinaryWriter编写var变量。它给出了编译错误cannot convert from 'object' to 'bool'。如何解决它?二进制文件(var/object)

BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create) 
var obj = Convert.ChangeType(property.GetValue(objectToWrite, null), property.PropertyType); 
writer.Write(obj); //Compile error 
+0

这可能是一个解决方案http://stackoverflow.com/questions/6759604/using-binarywriter -on-an-object – RobinAtTech

+1

btw,这里的'Convert.ChangeType'是多余的;来自'GetValue' **的结果必须**已经是那种类型 –

+0

@MarcGravell。你再正确无误。我只注意到 – RobinAtTech

回答

2

var在这种情况下将解析为object,因为这就是GetValue返回的结果。 BinaryWriter.Write没有超载,接受object。你接下来想要取决于几件事情:

  • ,如果你的目的是写一个非常简单的值(单个boolint,等等 - 这是由BinaryWriter支持)到一个文件,那么你将不得不打开那个简单值的类型;面露方式做到这一点是使用dynamic,这将找出答案在运行时:

    writer.Write((dynamic)obj); // not great, but should work 
    
  • ,如果你的目的是写数据的复件(一class/struct等等),那么你不应该正在使用BinaryWriter - 您应该使用串行器。也许BinaryFormatter(虽然有一些严重的扭结这使我不愿推荐它)或protobuf网,或类似

+0

@Rambo ......这里的实际数据类型是什么? –

+0

我正在阅读数据库。数据库表可能包含int,float,string变量。我必须动态地决定它并将其写入二进制文件 – RobinAtTech

+0

@Rambo写一个单一的值听起来可疑... –

0
BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create); 
var obj = Convert.ChangeType(property.GetValue(objectToWrite, null), property.PropertyType); 
writer.Write(obj); 

尝试使用obj而不是var

+2

有没有超载,好奇心接受'对象' –