2015-03-19 74 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()); 
} 
相關問題