小编And*_*ell的帖子

Xml使用内存流进行序列化和反序列化

我在下面的代码中遇到错误,它在尝试反序列化代码时无法找到根元素:

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)

Root元素中涉嫌重复的问题缺失使用XMLDocument对象,并且具有不同的正确答案.

c# xml serialization

4
推荐指数
1
解决办法
1万
查看次数

编译器将派生类视为实际定义的抽象引用函数

我正在编写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++ abstract-class instantiation

0
推荐指数
1
解决办法
117
查看次数

C#容器通过引用或值初始化?

我对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)

但这似乎不是有效的语法.

c# containers reference

-2
推荐指数
1
解决办法
170
查看次数