c#如何检查对象属性并正确转换?

时间:2015-03-19 09:10:29

标签: 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和名称,然后转换它。它真的很累,如何正确地将对象转换为原始数据类型。

我想要实现的是动态创建数据访问对象。 我上传图片时总是出错,转换为byte [],最后我得到一个错误,不能将字符串转换为varbinary(max)。 这就是我添加的原因:

if (prop.PropertyType.Name == "Byte[]")
                {
                    values.Add(new SqlParameter(prop.Name, Convert.ToByte(val)));
                } 

我认为这不是一个解决方案,这就是我问正确方法的原因。

1 个答案:

答案 0 :(得分:0)

我不确定您要尝试实现的目标,但您可以将Insert方法替换为:

public static void Insert(object insertObject)
{
    var convertedObject = Convert.ChangeType(insertObject, insertObject.GetType());
}