.net 如何减少if语句?

eivgtgni  于 2023-05-02  发布在  .NET
关注(0)|答案(4)|浏览(113)

我有一个对象,有一个查询的结果,这个对象有日期的领域,我需要处理的领域有日期'01-01-1991'更改为空。如何简化if语句?

if(item.date01 == "01-01-1991")
   item.date01 = null;

if(item.date02 == "01-01-1991")
   item.date02 = null;

if(item.date03 == "01-01-1991")
   item.date03 = null;

if(item.date04 == "01-01-1991")
   item.date04 = null;

我试着使用foreach,但不知道如何使用。..

foreach(var item in items)
{
    if(item.obj == "01-01-1991")
      item.obj = null;
}
9lowa7mx

9lowa7mx1#

因为要将每个属性与常量字符串进行比较,所以可以使用以下代码:

foreach (var item in items.GetType().GetProperties())
{
    if (item.GetValue(items).ToString() == "01-01-1991") 
        item.SetValue(items, null);
}
wlsrxk51

wlsrxk512#

我不确定你是否有一个工作的例子,因为'01 -01-1991'中的单引号在字符串或日期时间中是无效的。
另外,你提到date 01,date 02,...是字段。在这种情况下,您可以执行以下操作:

var item = new DataItem();

void CheckAndSet(ref string? date)
{
    if (date == "01-01-1900")
    {
        date = null;
    }
}

CheckAndSet(ref item.date01);
CheckAndSet(ref item.date02);
CheckAndSet(ref item.date03);
CheckAndSet(ref item.date04);

public class DataItem
{
    public string? date01;
    public string? date02;
    public string? date03;
    public string? date04;
}

为了详细说明,可以使用ref关键字来保持对原始变量的引用,在本例中,原始变量是DataItem类中的date 0x字段。

gmol1639

gmol16393#

迭代每一项

foreach(var item in items)
{
    this.CheckAndSetDate(ref item.date01,"01-01-1991");
    this.CheckAndSetDate(ref item.date02,"01-01-1991");
    this.CheckAndSetDate(ref item.date03,"01-01-1991");
    this.CheckAndSetDate(ref item.date04,"01-01-1991");
}

然后创建validate函数

public void CheckAndSetDate(ref string date, string value)
{
   date = date == value ? null : date;
}

foreach(var item in items)
{
    item.date01 = this.CheckAndSetDate(item.date01,"01-01-1991");
    item.date02 = this.CheckAndSetDate(item.date02,"01-01-1991");
    item.date03 = this.CheckAndSetDate(item.date03,"01-01-1991");
    item.date04 = this.CheckAndSetDate(item.date04,"01-01-1991");
}

public string CheckAndSetDate(ref string date, string value)
{
   return date == value ? null : date;
}
cl25kdpy

cl25kdpy4#

您可以使用反射。

foreach(var element in (IEnumerable)item)
     {
          Type type = element.GetType();
          PropertyInfo[] properties = type.GetProperties();
          foreach(PropertyInfo p in properties)
          {
              if(p.GetValue(element,null) == "01-01-1991")
              {
                  p.SetValue(item, null, null)
              }

           } 
      }

相关问题