我有这样的交易类:
Public class Transaction
{
public long Id { get; set; }
public int DId { get; set; }
public int BId { get; set; }
public int DocId { get; set; }
public int OpId { get; set; }
public string Description { get; set; }
public DateTime RegDate { get; set; }
}
我希望根据DId,BId,DocId和OpId生成唯一的 long 值。 当我们将所有这些字段组合在一起时,我得到了 Decimal 值! 现在如何根据以上字段获得唯一的 long 值?
答案 0 :(得分:0)
根据您添加的评论:
long.Parse(string.Concat(DId, BId, DocId, OpId))
DId的长度= 8 BId的长度= 5 DocId的长度= 7 OpId的长度= 4
并假设您所说的意思:
length of DId = 8 Value = 0 to 99,999,999 (up to 27 bits)
length of BId = 5 Value = 0 to 99,999 (up to 17 bits)
length of DocId = 7 Value = 0 to 9,999,999 (up to 24 bits)
length of OpId = 4 Value = 0 to 9,999 (up to 14 bits)
总共需要82位,以确保可以从四个源值中生成唯一值。
太长了,无法存储在最大存储容量为64位的long
中。
但是,如果您的意思是每个值的位与您指示的相同:
length of DId = 8 BITS Value = 0 to 255
length of BId = 5 BITS Value = 0 to 31
length of DocId = 7 BITS Value = 0 to 127
length of OpId = 4 BITS Value = 0 to 15
然后,只要总大小只有24位,就可以存储它。
您可以通过位移来实现:
long Id = (long)((DId << 16) + (BId << 11) + (DocId << 4) + OpId);