在看似随机的时间,每当我加载当天的 VC# Express 并开始工作时,我对代码所做的任何更改都不会反映在我的调试运行中。就好像 VC 只是拒绝编译代码而只是运行旧的已经编译的版本。删除项目目录中的“bin”文件夹没有帮助,因为 VC 只是抱怨它找不到 *.exe 而不是重新编译。进行重建有帮助,但仅适用于重建,因此我必须不断重建解决方案以查看任何更改,这真的很慢。
我发现摆脱这个问题的唯一方法(可能一两个星期)是创建一个新项目并手动复制我的代码。不用说,这真的令人沮丧和乏味。这是记录在案的问题吗?可以做些什么来修复它?在线搜索并没有真正找到任何答案,因为最适用于该问题的搜索词会带来很多干扰结果。
在尝试序列化我的类和子类时,在与一堆未捕获的异常进行摔跤之后,我终于明白了我的问题:当应用于基类时,[Serializable]不会被子类继承.我对C#属性一般都很模糊,但我确实理解在创建自定义属性时,程序员能够自动继承属性.
有没有办法覆盖[Serializable]的继承?有没有什么好的理由说明为什么从一开始就没有这样做和/或首先做一个坏主意?我希望所有基类的所有子类都是可序列化的,所以只需要将属性添加到我创建的任何新子类中似乎是不优雅的.
谢谢!
我正在为现有的C库开发一些D绑定,我有一堆函数定义,还有一堆绑定.例如:
// Functions
void function(int) funcA;
long function() funcB;
bool function(bool) funcC;
char function(string) funcD;
// etc...
// Bindings
if(!presentInLibrary("func")) return false;
if(!bindFunction(funcA, "funcA")) return false;
if(!bindFunction(funcB, "funcB")) return false;
if(!bindFunction(funcC, "funcC")) return false;
if(!bindFunction(funcD, "funcD")) return false;
// etc...
Run Code Online (Sandbox Code Playgroud)
此模型与Derelict处理OpenGL扩展加载的方式非常相似.但是,这似乎是很多冗余的打字.我真的想要一种表达上面"绑定"部分的方法:
BINDGROUP("func", "funcA", "funcB", "funcC", "funcD", ...); // Name of function group, then variable list of function names.
Run Code Online (Sandbox Code Playgroud)
这是可以用mixins完成的吗?
我有一个D mixin,我想用它来生成一个关于字符串值的switch语句(特别是case值),但是尽管KeyValues有条目并提供了正确的键值,默认情况总是唯一执行的:
class DataStore(KeyValues...) {
void stringSetData(string key, string data) {
switch(key) {
foreach(D; KeyValues) {
mixin("case \"" ~ D.Name ~ "\": set(to!(D.Type)(data)); break;");
}
default:
throw new Exception("Invalid meta key"); break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用硬编码的值测试了它,并且它按预期工作,所以我怀疑我可能在我的mixin本身做错了.我怎样才能让它按预期工作?
我试图弄清楚如何在Go中读取YAML文件,同时保留YAML文档中订购的键的顺序.我见过的大多数例子都涉及对键进行排序,但在我的情况下这不起作用.此外,YAML是任意结构的(键是用户定义的,值是字符串和字符串列表的混合,也是用户定义的),这使问题复杂化.
go-yaml.v2似乎做了我想做的事(http://blog.labix.org/2014/09/22/announcing-yaml-v2-for-go),但我找不到任何关于如何做的例子使用订购功能.那一直是Go的全新,让我很难过.
如果需要,我很乐意提供我正在尝试解析的YAML示例.