我有一个NHibernate的IUserType,我试图用来将一些固定大小的double []字段(不同大小)绑定到单个数据库列作为BLOB。我有下面的代码,但不知何故,我需要传递一个常量整数,所以它知道数组应该是多大。我不认为有一种方法可以在运行时以自定义的方式实例化这种类型,所以尺寸真的需要成为类型本身的一部分。如果我能避免它,我宁愿没有这个丑陋类的两个副本!传递一个常量作为C#泛型类型参数
public class DoubleArrayUserType<Size> : NHibernate.UserTypes.IUserType
{
private int _size = sizeof(Size);
public object Assemble(object cached, object owner)
{
if (cached == null)
return null;
if (cached == DBNull.Value)
return null;
if (!(cached is byte[]))
throw new ArgumentException();
var arrayBytes = cached as byte[];
var arrayStream = new BinaryReader(new MemoryStream(arrayBytes));
var values = new double[_size];
for (int i = 0; i < _size; ++i)
values[i] = arrayStream.ReadDouble();
return values;
}
public object Disassemble(object value)
{
if (value == null)
return DBNull.Value;
if (value == DBNull.Value)
return DBNull.Value;
if (!(value is double[]))
throw new ArgumentException();
var values = value as double[];
var bytes = new List<byte>(sizeof(double) * _size);
for (int i = 0; i < _size; ++i)
bytes.AddRange(BitConverter.GetBytes(values[i]));
return bytes.ToArray();
}
public NHibernate.SqlTypes.SqlType[] SqlTypes
{
get { return new NHibernate.SqlTypes.SqlType[] { NHibernate.SqlTypes.SqlTypeFactory.GetBinaryBlob(1) }; }
}
}
我假设你意识到你的问题的文字暗示你想要做一些在.Net中不可能的事情?你可能想考虑改变它。 – 2012-07-31 15:00:24
你不能:它不是C++ ;-) – Seb 2012-07-31 15:00:58
有没有理由不能将arrayBytes的长度除以double的大小? – Neil 2012-07-31 15:02:49