按照此处的示例:https://github.com/Microsoft/bond/tree/master/examples/cs/core/decimal
我试图在不在基本命名空间中的结构中使用decimal并获得异常“类型'System.Decimal'的表达式不能用于赋值类型'System.ArraySegment`1 [System.Byte] “”。
如果我将所有结构保留在同一名称空间中,那么一切都很有效。我必须做某种类型的排位赛吗?
我已经整理了一个小项目和几个单元测试来演示:https://github.com/oculuss/BondDecimalExample
TestA将所有内容都放在同一名称空间中。 TestB有一些子命名空间(并且会破坏)。
答案 0 :(得分:1)
必须在相同的程序集和名称空间中定义BondTypeAliasConverter作为表示使用类型别名的Bond模式的类或程序集/名称空间其中一种被转换的类型。"它不能在父命名空间中定义。搜索算法并不聪明。 :-)因此,在TestB中,您需要将BondTypeAliasConverter类放在C#名称空间" BondExampleB.Global.SecondType.SecondTypeA" (或者您在C#中将其映射到的任何地方)。
有一个开放的设计方案可以让这更容易一些。请参阅Bond GitHub项目中的issue #594。
除非出现这种情况,如果您希望为不同名称空间中的类型使用相同的转换器,您需要执行以下操作:
namespace Util
{
public static class BondTypeAliasConverter
{
public decimal Convert(ArraySegment<byte> blob, decimal unused) { ... }
public ArraySegment<byte> Convert(decimal d, ArraySegment<byte> unused) { ... }
}
}
namespace First
{
public static class BondTypeAliasConverter
{
public decimal Convert(ArraySegment<byte> blob, decimal unused)
{
return Util.BondTypeAliasConverter.Convert(blob, unused);
}
....
}
}
namespace First.Second
{
public static class BondTypeAliasConverter
{
public decimal Convert(ArraySegment<byte> blob, decimal unused)
{
return Util.BondTypeAliasConverter.Convert(blob, unused);
}
....
}
}