一般地指复杂类 [英] Generically Referring to a Complex Class

查看:76
本文介绍了一般地指复杂类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在我的程序中构建了几种复杂的类。

将它们存储到磁盘上没有问题,因为我只是将实例化的

对象传递给SaveData方法,将其接受为通用对象。然后我使用

反射来遍历对象并保存数据。


但是从磁盘加载数据似乎不是通用的。我有几个挑战,但这里有一个是第一个:


public void OpenData(string filename,object dataModel)

{

投票modelPoll =新投票();

SysInfo modelSys =新SysInfo();


开关(dataModel.GetType()。姓名)

{

case" Poll":

modelPoll =(Poll)dataModel;

休息;


case" SysInfo":

modelSys =(SysInfo)dataModel;

break;

}


// ......这里有更多代码

}

因为我需要为了深入了解每个复杂对象的细节,我发现

我需要先将通用对象转换为特定的对象类型。但是

这需要大量的非通用代码。


两个问题:

1.有没有办法解决这个?

2.我应该考虑采用一种完全不同的方法吗?


注意#2:我的存储格式是XML。但我无休止地试图获得

内置的XML阅读器方法无济于事。我认为*这是因为

我的复杂对象有几个嵌套集合和嵌套类。我需要他们才能最好地绘制出我正在做的事情,所以我发现有必要写下我的

自己的Save&打开XML解析器。他们工作正常,但我希望我可以让他们更好地重复使用




-

Robert W.
温哥华,BC
www.mwtech.com

I have built several kinds of complex classes that I work with in my program.
Storing them to disk is no problem because I just pass the instantiated
object to a SaveData method, accepting it as a generic "object". Then I use
reflection to iterate through the object and save the data.

But loading the data from disk seems to be anything but generic. I have
several challenges with this but here''s one of the first:

public void OpenData (string filename, object dataModel)
{
Poll modelPoll = new Poll();
SysInfo modelSys = new SysInfo();

switch(dataModel.GetType().Name)
{
case "Poll":
modelPoll = (Poll) dataModel;
break;

case "SysInfo":
modelSys = (SysInfo) dataModel;
break;
}

// ... much more code here
}
Because I need to get into the details of each complex object, I found that
I needed to cast the generic object to the specific object type first. But
this requires a whole lot of un-generic code.

Two questions:
1. Is there a way around this?
2. Is there an entirely different approach I should be considering?

Note re #2: My storage format is XML. But I endlessly tried to get the
built-in XML reader methods working to no avail. I *think* this is because
my complex objects have several nested collections and nested classes. I
need them to best map out what I''m doing so I found it necessary to write my
own Save & Open XML parsers. They work fine but I just wish I could make
them more reusable.

--
Robert W.
Vancouver, BC
www.mwtech.com

推荐答案

现在使用序列化?


" Robert W." <滚装***** @ discussions.microsoft.com>在消息中写道

新闻:E0 ********************************** @ microsof t.com ...
By now use serialization?

"Robert W." <Ro*****@discussions.microsoft.com> wrote in message
news:E0**********************************@microsof t.com...
我已经在我的
程序中构建了几种复杂的类。
将它们存储到磁盘上是没有问题的,因为我只是通过了实例化对象为SaveData方法,将其作为通用对象接受。然后我使用
反射来遍历对象并保存数据。

但是从磁盘加载数据似乎不是通用的。我有几个挑战,但这里是第一个:

public void OpenData(string filename,object dataModel)
{
Poll modelPoll = new Poll();
SysInfo modelSys = new SysInfo();

switch(dataModel.GetType()。姓名)
{
案例投票:
modelPoll =(Poll)dataModel;
break;

case" SysInfo":
modelSys =(SysInfo)dataModel;
break;
}

// ...这里有更多的代码
}

因为我需要了解每个复杂对象的细节,我发现了我需要先将通用对象转换为特定的对象类型。
但这需要大量非通用代码。

两个问题:
1.有没有解决方法?
2.我应该考虑采用一种完全不同的方法吗?

请注意#2:我的存储rmat是XML。但我无休止地试图让内置的XML阅读器方法起作用无济于事。我认为*这是
因为我的复杂对象有几个嵌套集合和嵌套类。我需要他们最好地绘制出我正在做的事情,所以我发现有必要写一下
我自己的Save&打开XML解析器。它们工作正常,但我希望我能让它们更可重复使用。

-
Robert W.
温哥华,BC
www.mwtech.com



彼得,我不明白你的回应。


-

罗伯特W.

温哥华,不列颠哥伦比亚省/> www.mwtech.com


" ; Peter Rilling写道:
Peter, I don''t understand your response whatsoever.

--
Robert W.
Vancouver, BC
www.mwtech.com

"Peter Rilling" wrote:
现在使用序列化?








罗伯特W. <滚装***** @ discussions.microsoft.com>在留言中写道

新闻:C2 ********************************** @ microsof t.com ...

"Robert W." <Ro*****@discussions.microsoft.com> wrote in message
news:C2**********************************@microsof t.com...
现在使用序列化?


彼得,我不明白你的反应是什么。

Peter, I don''t understand your response whatsoever.




我认为他建议你看一下序列化。主题

在帮助文件中。 .Net框架已经提供了对b / b序列化/反序列化对象(例如,从磁盘到/从磁盘)的能力。我从来没有用过它,所以我

不能说它有多容易或它的效果如何,但它可能值得




I think he''s recommending that you have a look at the "serialization" topic
in the help file. The .Net framework already provides the ability to
serialize/deserialize objects (e.g. to/from disk). I''ve never used it, so I
can''t say how easy it is or how well it works, but it''s probably worth
looking into.


这篇关于一般地指复杂类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆