在我的程序中,我将在运行时获得一个 var
对象,我想将其写入二进制文件,但我无法写入 var
变量通过使用BinaryWriter
。它给出了一个编译错误,无法从“object”转换为“bool”
。怎么解决?
BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)
var obj = Convert.ChangeType(property.GetValue(objectToWrite, null), property.PropertyType);
writer.Write(obj); //Compile error
最佳答案
在这种情况下,
var
将解析为 object
,因为这是 GetValue
返回的内容。不存在接受 object
的 BinaryWriter.Write
重载。接下来您想要什么取决于以下几件事:
如果您的目的是编写一个非常简单的值(单个
bool
、int
等 - 由BinaryWriter
支持的内容) ) 到一个文件,那么您将必须打开该简单值的类型;一个厚颜无耻的方法是使用dynamic
,它会在运行时解决这个问题:writer.Write((dynamic)obj); // not great, but should work
如果您的目的是写入一段复杂的数据(
class
/struct
等),那么您不应该使用BinaryWriter
- 您应该使用序列化器。也许是BinaryFormatter
(尽管它有一些严重的问题,让我不愿意推荐它)或 protobuf-net,或类似的
关于c# - 二进制写入(var/object),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689746/