c#如何检查对象属性并将其转换为适当的方式?
问题描述:
我有一个代码c#如何检查对象属性并将其转换为适当的方式?
Page.cs
public class Page
{
public Guid Id { get; set; }
public String Title { get; set; }
public String SubTitle { get; set; }
public String Slug { get; set; }
public String Content { get; set; }
public Int16 Status { get; set; }
public Int16 Visibility { get; set; }
public Guid? ParentId { get; set; }
public int Order { get; set; }
public byte[] FeaturedImage { get; set; }
public Guid CreatedBy { get; set; }
public DateTime CreatedAt { get; set; }
public Guid ModifiedBy { get; set; }
public DateTime ModifiedAt { get; set; }
}
Other.cs
Some.Insert(new Page
{
Id = Guid.NewGuid(),
Title = "Glass",
SubTitle = "",
Slug = "glass",
Content = "content",
Status = 1,
Visibility = 1,
ParentId = Guid.NewGuid(),
Order = 1,
FeaturedImage = null,
CreatedBy = Guid.NewGuid(),
CreatedAt = DateTime.Now,
ModifiedBy = Guid.NewGuid(),
ModifiedAt = DateTime.Now
});
Some.cs
public static void Insert(Object insertObject)
{
Type myType = insertObject.GetType();
IList <PropertyInfo> props = new List <PropertyInfo> (myType.GetProperties());
foreach(PropertyInfo prop in props)
{
Object val = prop.GetValue(insertObject, null);
if (prop.PropertyType.Name == "Byte[]")
{
values.Add(new SqlParameter(prop.Name, Convert.ToByte(val)));
}
else
values.Add(new SqlParameter(prop.Name, val));
}
}
我的代码表明,我硬编码检查每propertyType和name,然后转换它。它真的很累,如何将对象转换为原始数据类型的适当方式。
我想实现的是动态创建一个数据访问对象。 我上传图片时总是出错,转换为byte [],最后我得到一个错误不能将字符串转换为varbinary(max)。 这就是为什么我添加:
if (prop.PropertyType.Name == "Byte[]")
{
values.Add(new SqlParameter(prop.Name, Convert.ToByte(val)));
}
我认为这不是解决办法,这就是为什么我问的正确方法。
答
我真的不知道你想达到什么样的,但你可以取代你Insert
方法:
public static void Insert(object insertObject)
{
var convertedObject = Convert.ChangeType(insertObject, insertObject.GetType());
}
我看不到你的代码实际上是想达到什么目的?听起来有点像XY问题,但不能确定.. – Sayse 2015-03-19 09:15:25
'Convert.ChangeType(val,prop.PropertyType.Name)'会在这里工作。转换后使用的返回数据在哪里? – 2015-03-19 09:15:53
我得到的错误:错误参数2:无法从'字符串'转换为'System.Type'\t,因为prop.Property.Name返回字符串 – yozawiratama 2015-03-19 09:19:52