0

我有一个类,其中包含一些不同数据类型的项目。我想为每个项目设置值并将其从控制器发送到视图,并在文本框中查看数据。

是否可以遍历类中的这些对象,检查它的数据类型,然后为每个对象分配一个值?

这是我要完成的伪代码示例

foreach item in class ItemProduction
{
    if data type  == string 
        value of item = " " ; 

    if data type  == int
        value of item = 0 ; 

    if data type  == DAte
       value of item = date of today ;          
 }

这是我的类定义和其中的对象。

public class ItemProduction : Common, IDataErrorInfo, INotifyPropertyChanged
{
    public string Main{ get; set; }
    public DateTime itemDate { get; set; }
    public string ItemType{ get; set; }
    public string productionId{ get; set; }
    public int Quantity { get; set; }
    public string Status { get; set; }

}
4

2 回答 2

0

你可以试试这个:

 List<ItemProduction> items = Enumerable.Range(1, 5).Select(i => new ItemProduction
 {
      Main = string.Empty,
      ItemDate = DateTime.UtcNow,
      ItemType = string.Empty,
      ProductionId = string.Empty,
      Quantity = 0,
      Status = string.Empty
 }).ToList();

这将创建 5 个实例,ItemProduction并根据您的需要使用给定的值初始化所有这些实例。

最好的办法是在您的 ItemProduction 模型中有一个构造函数,如下所示:

public class ItemProduction
{
   public string Main { get; set; }
   public DateTime TtemDate { get; set; }
   public string ItemType { get; set; }
   public string ProductionId { get; set; }
   public int Quantity { get; set; }
   public string Status { get; set; }

   public ItemProduction()
   {
       this.Main = string.Empty;
       this.ItemDate = DateTime.UtcNow;
       this.ItemType = string.Empty;
       this.ProductionId = string.Empty;
       this.Quantity = 0;
       this.Status = string.Empty;
   }
}

因此,上面的代码将简单地变成

List<ItemProduction> items= Enumerable.Range(1, 5).Select(i => new ItemProduction()).ToList();

笔记:

将类属性设置为 PascalCase 是一种约定,因此我已使用嵌套命名约定修改了您的类。您可以阅读此属性命名指南。

更新:

如果你有很多属性,你可以使用反射来做到这一点,如下所示:

public static T Init<T>(T TObject)
{
  var properties = TObject.GetType().GetProperties();
  foreach (var property in properties)
  {
     if (property.PropertyType.Equals(typeof(string)))
     {
         property.SetValue(TObject, string.Empty);
     }
     else if (property.PropertyType.Equals(typeof(int)))
     {
         property.SetValue(TObject, 0);
     }
     else if (property.PropertyType.Equals(typeof(DateTime)))
     {
         property.SetValue(TObject, DateTime.UtcNow);
     }
  }
  return TObject;
}
于 2013-09-01T09:01:40.620 回答
0

使用 if 语句根据数据类型设置值不是一个好主意。如果您只想将此 ItemProduction 类的对象作为模型传递给您的视图,只需为您的 ItemProduction 类创建一个构造函数并使用默认值初始化您的模型值并将其发送到您的视图

 public class ItemProduction 
{
    public string Main { get; set; }
    public DateTime itemDate { get; set; }
    public string ItemType { get; set; }
    public string productionId { get; set; }
    public int Quantity { get; set; }
    public string Status { get; set; }
    public ItemProduction()
    {
        Main = "main value";
        itemDate =DateTime.Now;
        ItemType ="type";
        productionId ="productionId";
        Quantity =5;
        Status = "status";
    }
}

如果您想使用反射动态设置值,请参考以下问题: c# - How to iterate through classes fields and set properties

于 2013-09-01T09:09:20.540 回答