3

我有 2 个类,每个类具有不同的属性。另外,我有一组 A 类对象的集合。现在我想将它们复制到 B 类对象的数组中。

这两个类不相关,并且每个类中的字段也不同。所以我必须明确映射我要复制的字段。现在我正在使用 foreach 来复制单个元素。有没有更短的方法来实现这一点。 这是B级

 public class Event
        {
            public string EventOriginTime { get; set; }
            public string EventReceivedTime { get; set; }
            public int EventCode { get; set; }
            public string CardNumber { get; set; }
            public string ReaderName { get; set; }

        }

头等舱 A 也会出现这样的情况,但那是第 3 方舱。

我目前的解决方案是:

List<Event> listOfEvents = new List<Event>();
            foreach (var eachEvent in eventsFromArgus)
            {
                listOfEvents.Add( new Event
                { 
                    ReaderName = eachEvent.DeviceName, 
                    EventCode = eachEvent.EventCode, 
                    EventReceivedTime = eachEvent.ReceiveTime.ToString(), 
                    EventOriginTime = eachEvent.OriginTime.ToString(), 
                    CardNumber = eachEvent.CredentialIdentifier
                });
            }
4

4 回答 4

4

您可以使用 LINQ:

List<event> listOfEvents = 
    (from eachEvent in eventsFromArgus
     select new Event(
         ReaderName = eachEvent.DeviceName, 
         EventCode = eachEvent.EventCode, 
         EventReceivedTime = eachEvent.ReceiveTime.ToString(), 
         EventOriginTime = eachEvent.OriginTime.ToString(), 
         CardNumber = eachEvent.CredentialIdentifier)).ToList();

但这与您已经拥有的并没有太大的不同。

或者,您可以查看类似AutoMapper的内容。

于 2013-07-05T04:31:11.860 回答
3

另一种方法是将第三方对象直接传递到 Event 类的构造函数中:

public class Event
{
    private readonly ThirdPartyClass _eventFromArgus;

    public Event(ThirdPartyClass eventFromArgus)
    {
        _eventFromArgus = eventFromArgus;
    }

    public string ReaderName { get { return _eventFromArgus.DeviceName; } }
    // etc.
}

然后你可以这样做:

var listOfEvents = eventsFromArgus.Select(eachEvent => new Event(eachEvent));
于 2013-07-05T04:47:46.313 回答
2

正如吉姆建议的那样,也与 linq 一起使用,但有点不同

var listOfEvents = eventsFromArgus.Select(eachEvent => 
    new Event( ReaderName = eachEvent.DeviceName, 
               EventCode = eachEvent.EventCode, 
               EventReceivedTime = eachEvent.ReceiveTime.ToString(), 
               EventOriginTime = eachEvent.OriginTime.ToString(), 
               CardNumber = eachEvent.CredentialIdentifier)).ToList();
于 2013-07-05T04:34:43.320 回答
1

您可以将构造函数添加到 Event 类:

public Event(string EventOriginTime, string EventReceivedTime, int EventCode, string CardNumber, string ReaderName)
{
    this.EventOriginTime = EventOriginTime;
    this.EventReceivedTime = EventReceivedTime;
    this.EventCode = EventCode;
    this.CardNumber = CardNumber;
    this.ReaderName = ReaderName;
}

那么至少您不必在创建新实例时指定字段名称。

List<Event> listOfEvents = new List<Event>();
foreach (var eachEvent in eventsFromArgus)
{
    listOfEvents.Add(new Event(eachEvent.OriginTime.ToString(), eachEvent.ReceiveTime.ToString(), eachEvent.EventCode, eachEvent.DeviceName)
}
于 2013-07-05T04:35:13.187 回答