Comments (9)
没看懂你这个写法。
读取表后,是需要自己做数据处理。
from tabtoy.
不好意思我之前没写清楚思路,这里有一个按照我思路大概写出来的一个读表类,可以做到对所有的表都可以直接读取,而不需要重复写读表这个过程:
using tabtoy;
public class TabtoyHelper<TConfig, TDefine> where TConfig : ITabToyConfig, TDefine : IDefine {
public TConfig DataReader (string filePath) {
using (var stream = new FileStream (filePath, FileMode.Open)) {
stream.Position = 0;
var reader = new DataReader (stream);
if (!reader.ReadHeader ()) {
Console.WriteLine ("combine file crack!");
return;
}
var config = new TConfig ();
TConfig.Deserialize (config, reader);
return config;
}
}
}
这个类可以由使用者自己来写,根据他们的需要用DI或者单例等方式来写这个TabtoyHelper
要实现这样的写法只需要在生成的C#文件中,Config类继承一个ITabToyConfig的空接口,PlayerDefine类继承一个IDefine的空接口。同时在原本tabtoy的C#代码中加入上述两个空接口的定义即可。
from tabtoy.
你是想把每个结构单独读取吧?
from tabtoy.
不是,假如我有5个不同的表,Player, Item, Map 。。。
我通过上面写的方法就可以做到一套代码复用给这5个表的读取,至于读取完数据怎么用,再分别写各自的代码。
因为我发现上面的代码我每处理一个新的表,都要复制改写一次。
比如我想读取Player,就直接
var playerConfig = TabtoyHelper<Player.Config, PlayerDefine>.instance.DataReader("Data/Player.bin");
var player0 = playerConfig.GetPlayerByID(0);
我相当于把读取部分的代码复用了。
from tabtoy.
你不是直接用表数据,而是拷贝一份吧?
from tabtoy.
对的,我这里就是把表数据缓存下来了,然后按需使用。
如果我把TabtoyHelper做成单例类的话,也可以通过Clear方法清理缓存。
总的来说,就是对数据的使用更自由了。
from tabtoy.
这种并不是tabtoy建议的用法,两份数据你维护起来会很麻烦。
from tabtoy.
我没有两份数据啊,只有一份数据。
又或者,我没有缓存,我把上面的代码写成静态类:
public static class TabtoyHelper<TConfig, TDefine> where TConfig : ITabToyConfig, TDefine : IDefine {
public static TConfig DataReader (string filePath) {
using (var stream = new FileStream (filePath, FileMode.Open)) {
stream.Position = 0;
var reader = new DataReader (stream);
if (!reader.ReadHeader ()) {
Console.WriteLine ("combine file crack!");
return;
}
var config = new TConfig ();
TConfig.Deserialize (config, reader);
return config;
}
}
}
至少我做到了对这段代码的复用,而不是每次需要读表的时候都要重复写一次上面的代码。
否则你看一下,如果我有5个表,那么上面的代码我至少要写5次。
from tabtoy.
不好意思我之前没写清楚思路,这里有一个按照我思路大概写出来的一个读表类,可以做到对所有的表都可以直接读取,而不需要重复写读表这个过程:
using tabtoy; public class TabtoyHelper<TConfig, TDefine> where TConfig : ITabToyConfig, TDefine : IDefine { public TConfig DataReader (string filePath) { using (var stream = new FileStream (filePath, FileMode.Open)) { stream.Position = 0; var reader = new DataReader (stream); if (!reader.ReadHeader ()) { Console.WriteLine ("combine file crack!"); return; } var config = new TConfig (); TConfig.Deserialize (config, reader); return config; } } }
这个类可以由使用者自己来写,根据他们的需要用DI或者单例等方式来写这个TabtoyHelper
要实现这样的写法只需要在生成的C#文件中,Config类继承一个ITabToyConfig的空接口,PlayerDefine类继承一个IDefine的空接口。同时在原本tabtoy的C#代码中加入上述两个空接口的定义即可。
你这里TConfig.Deserialize(config, reader)不能直接调用吧,你这么解决这里的问题的?
from tabtoy.
Related Issues (20)
- 存在多张 KV 表时 C# 导出格式错误 HOT 1
- v2版本对象中的字段是否可以是数组? HOT 3
- 可以支持同一个excel中多个sheet吗 HOT 3
- 导出.proto描述文件时,能否将表头的标识名也注释在字段后面 HOT 1
- TT201 错误,“value碰到字符串时, 需要用双引号括起来”,还是会报错 HOT 2
- V2版本编译linux 的方法 HOT 1
- 直链github使用go get 报错 HOT 4
- 请问支持多主键吗? HOT 1
- 申请数组切割符支持多个字符进行切割 HOT 2
- 使用protobuf方式,生成的代码文件,无法以O(1)或map的方式存取;因为相关的数据结构是数组的
- 数据表中只支持枚举标识名和字段名,是否可以增加对枚举值的支持
- cannot find the file specified
- 导出lua时的转义符处理问题
- v2 ColumnMajor_ColumnValue should is 5 HOT 1
- (C#)导出时将枚举定义中的标识名作为enum的description属性? HOT 1
- 删除数据表里某一列,但是Type表里忘记删对应字段,不会报错,而且还能导出删除列的字段 HOT 1
- go导出文件报错 HOT 3
- 能否提供一个V3结构体的例子 HOT 7
- 生成go文件的bug? HOT 4
- 请问表格中标记列的标记有没有解释? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tabtoy.