c#如何检查对象属性并正确转换?
我有密码 Page.csc#如何检查对象属性并正确转换?,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 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; }
}
其他
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
});
一些
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));
}
}
我认为这不是一个解决方案,这就是为什么我要问正确的方法。我不确定你想要实现什么,但你可以用以下方法替换你的
Insert
方法:
public static void Insert(object insertObject)
{
var convertedObject = Convert.ChangeType(insertObject, insertObject.GetType());
}
我看不出你的代码到底想要实现什么?听起来有点像XY问题,但不能确定..
Convert.ChangeType(val,prop.PropertyType.Name)
在这里可以工作。转换后返回的数据在哪里使用?我得到错误:错误2参数2:无法从“字符串”转换为“System.Type”,因为prop.Property.Name返回字符串您究竟插入了什么?参数类型真的需要是Object
?在我看来,最好使用泛型方法Insert(T项)
public static void Insert(object insertObject)
{
var convertedObject = Convert.ChangeType(insertObject, insertObject.GetType());
}