Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在模块之间转换枚举_C#_C_Enums_Module - Fatal编程技术网

C# 在模块之间转换枚举

C# 在模块之间转换枚举,c#,c,enums,module,C#,C,Enums,Module,我在一个模块(A)中有一个枚举定义,例如SUCCESS=0、INVALID_REQ=1等。然后我有另一个dll(模块B),它有自己的一组状态枚举。在a中添加新的枚举值后,我们必须手动将其添加到B,因为a在.NET中,B是C代码。此外,A中的枚举只是B中状态枚举的一部分(除了A中的状态外,B还有自己的内部状态)。 这两个模块之间的耦合似乎非常紧密。有什么建议可以减少它们的耦合吗? 谢谢 为什么不编写一个简单的脚本,在构建期间基于文件生成这些枚举?如果你真的想将它们解耦,你需要让某人成为大师,并将其

我在一个模块(A)中有一个枚举定义,例如SUCCESS=0、INVALID_REQ=1等。然后我有另一个dll(模块B),它有自己的一组状态枚举。在a中添加新的枚举值后,我们必须手动将其添加到B,因为a在.NET中,B是C代码。此外,A中的枚举只是B中状态枚举的一部分(除了A中的状态外,B还有自己的内部状态)。 这两个模块之间的耦合似乎非常紧密。有什么建议可以减少它们的耦合吗?
谢谢

为什么不编写一个简单的脚本,在构建期间基于文件生成这些枚举?如果你真的想将它们解耦,你需要让某人成为大师,并将其内容公开给另一方。。可能使用RCW..

在这里使用反射会很有趣。编写一个小程序,通过模块a的反射读取枚举,并生成一个.h文件供c模块使用。

这里最大的问题是无法保持两者同步(尽管这是一个问题),但事实上,B中的枚举与A中的枚举有不同的含义。现在,您可能希望向A添加新元素,但它突然与B使用的内部值冲突。如果为了互操作性需要复制值,仅用于互操作性,并单独管理内部状态。想象一下,HTTP2添加了一个新动词say。所有HTTP2客户机/服务器都需要使用本合同的知识进行编码。使用显式[协议]版本(可能带有防护装置和控制器)有助于捕获和/或缓解不匹配。有一些工具可以帮助共享合同信息——想象或其他脚手架生成器。@Dan:我想按原样在A中使用枚举值,并从100开始在B中定义常量(从A开始为0-99)。然后使用integer而不是enum作为B的接口。A和B的状态都可以从B的接口中暴露出来,不用担心A和B会相互干扰。:)这不是写的世界末日。:)