2013-05-22 162 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

有沒有超載,好奇心接受'對象' –