2015-03-19 66 views
0

我有一个代码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))); 
       } 

我认为这不是解决办法,这就是为什么我问的正确方法。

+0

我看不到你的代码实际上是想达到什么目的?听起来有点像XY问题,但不能确定.. – Sayse 2015-03-19 09:15:25

+0

'Convert.ChangeType(val,prop.PropertyType.Name)'会在这里工作。转换后使用的返回数据在哪里? – 2015-03-19 09:15:53

+0

我得到的错误:错误参数2:无法从'字符串'转换为'System.Type'\t,因为prop.Property.Name返回字符串 – yozawiratama 2015-03-19 09:19:52

回答

0

我真的不知道你想达到什么样的,但你可以取代你Insert方法:

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