我在下面的代码中遇到错误,它在尝试反序列化代码时无法找到根元素:
System.Xml.dll中发生类型为"System.InvalidOperationException"的异常但未在用户代码中处理
附加信息:XML文档(0,0)中存在错误.
内部异常:{"缺少根元素."}
这似乎是直截了当的代码,但谷歌搜索和搜索SO在这个问题上没有产生任何明确的答案 - 只有类似的问题仍然是答案没有帮助......或者我误解了一些东西.
[TestMethod]
public void TestSerialize()
{
XmlSerializer serializer = new XmlSerializer(testObject.GetType());
MemoryStream memStream = new MemoryStream();
serializer.Serialize(memStream, testObject);
XmlSerializer xmlSerializer = new XmlSerializer(testObject.GetType());
TestObject testObj = ((TestObject)xmlSerializer.Deserialize(memStream));
assert(testObject == testObj);
}
public class TestObject
{
public int IntProp { get; set; }
public string StringProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在编写Acellerated c ++第15章的代码.我或多或少地直接从本书中复制了代码,除了在某些地方他们在头文件的类体中定义了类似构造函数的东西,然后我把它们分开了避免链接错误.
以下是代码; 我试图在Visual Studio 2010中编译它,但不幸的是它失败了.它告诉我它不能创建"String_Pic"和其他派生类(Frame_Pic,HCat_Pic和VCat_Pic)的实例,因为它说它们仍然是抽象类.它说罪魁祸首是"显示"功能,它说是未定义的.但是,我清楚地为每个派生类定义它,如下所示.
这里发生了什么?
标题:
#ifndef _GUARD_PIC_BASE_H
#define _GUARD_PIC_BASE_H
#include "Ptr.h"
#include <iostream>
#include <string>
#include <vector>
class Picture;
class Pic_base {
friend std::ostream& operator<<(std::ostream&, const Picture&);
friend class Frame_Pic;
friend class HCat_Pic;
friend class VCat_Pic;
friend class String_Pic;
typedef std::vector<std::string>::size_type ht_sz;
typedef std::string::size_type wd_sz;
virtual wd_sz width() const = 0;
virtual ht_sz height() const = 0;
virtual void display(std::ostream, ht_sz, bool) const = 0;
public:
virtual ~Pic_base(){ }
protected:
static void pad(std::ostream&, wd_sz, wd_sz);
}; …Run Code Online (Sandbox Code Playgroud) 我对C++很有经验,但对C#来说有点新鲜.
将对象添加到容器时,它们是通过引用还是按值传递的?
也就是说,如果我这样做:
myClass m = new myClass(0); //Assume the class just holds an int
List<myClass> myList = new List<myClass>(1);
myList.Add(m);
myList[0] += 1;
Console.WriteLine(m);
Console.WriteLine(myList[0]);
Run Code Online (Sandbox Code Playgroud)
结果会是:
0
1
Run Code Online (Sandbox Code Playgroud)
还是会的?
1
1
Run Code Online (Sandbox Code Playgroud)
?
如果是前者,那怎么能让我做到后者呢?我的第一直觉是做类似的事情
myClass ref mref = m;
Console.WriteLine(mref);
Run Code Online (Sandbox Code Playgroud)
但这似乎不是有效的语法.