大佬教程收集整理的这篇文章主要介绍了C#MongoDB尝试将enum:uint32转换为int32并崩溃,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
public enum MyEnum : uint { ValueA = 1233104067,ValueB= 1119849093,ValueC= 2726580491 }
每当我用这个枚举创建一个类并尝试将其存储到数据库中时.
例如
class MyClass { public MyEnum newValue = MyEnum.Valuec; }
Unhandled Exception: System.overflowException: Value was either too large or too small for an Int32. at System.Convert.ThrowInt32OverflowException() at System.UInt32.System.IConvertible.ToInt32(IFormatProvider provider) at MongoDB.bson.serialization.serializers.Enumserializer`1.serialize(BsonserializationContext context,BsonserializationArgs args,TEnum value)
它尝试将uint值转换为int,但它们太大而且会抛出异常.
我该如何解决这个问题?
谢谢.
你有三个选择:
>注释您的未签名类型.
如果使用驱动程序v2.4.3或更早版本:
public class MyClass { [BsonRepresentation(BsonType.Int32,AllowOverflow = truE)] public MyEnum Value1 = MyEnum.Valuec; [BsonRepresentation(BsonType.Int32,AllowOverflow = truE)] public uint Value2 = uint.MaxValue; }
不幸的是,驱动程序v2.4.4及更高版本中的序列化程序不尊重
AllowOverflow,无论如何抛出异常(测试和
确认,感谢dnickless指出这一点).这是一个解决方法
(以牺牲一些浪费的空间为代价):
public class MyClass { [BsonRepresentation(BsonType.Int64)] public MyEnum Value1 = MyEnum.Valuec; [BsonRepresentation(BsonType.Int64)] public uint Value2 = uint.MaxValue; }
>使用签名类型并在适当的时候转换.
// Defaults to int. public enum MyEnum { ValueA = 1233104067,ValueB = 1119849093,ValueC = unchecked((int)2726580491) } // Usage. uint a = (uint)R_589_11845@yEnum.ValueA; uint b = (uint)R_589_11845@yEnum.ValueB; uint c = unchecked((uint)R_589_11845@yEnum.ValueC); uint d = (uint)document["MyProperty"].AsInt32; // Reading from a BsonDocument.
>手动序列化(UInt32Serializer,UInt64Serializer等).
以上是大佬教程为你收集整理的C#MongoDB尝试将enum:uint32转换为int32并崩溃全部内容,希望文章能够帮你解决C#MongoDB尝试将enum:uint32转换为int32并崩溃所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。