gpt4 book ai didi

C# 避免重复代码,使用泛型

转载 作者:太空狗 更新时间:2023-10-30 01:01:40 25 4
gpt4 key购买 nike

主题可能看起来这个问题已经发布了,但我的代码片段和问题是不同的。请看一下。我有大约 20 到 22 个 Sql 表,我在我的应用程序中创建了我的 POCO 类。这些表中的每一个都有一些 4-5 个公共(public)列,我需要在应用程序中填充一些记录,表的其余列已经由其他应用程序发送的 XML 数据填充。我正在尝试填写应用程序的每个表中仅有的 4-5 个公共(public)列,如下所示。

private List<Software> GetSoftwareEntityData(Information request, DateTime scanDateTime)
{
List<Software> Data = new List<Software>();
int SrNo = 0;
foreach (var item in request.Software)
{
Software d = new Software();
d = item;
d.DCDTime = DateTime.Now;
d.LastModDTime = scanDateTime;
d.ID = request.Id;
d.ScanDateTime = scanDateTime;
d.SrNo = ++SrNo;
Data.Add(d);
}
return Data;
}

private List<Users> GetUsersEntityData(Information request, DateTime scanDateTime)
{
List<Users> Data = new List<Users>();
int SrNo = 0;
foreach (var item in request.Users)
{
Users d = new Users();
d = item;
d.DCDTime = DateTime.Now;
d.LastModDTime = scanDateTime;
d.ID = request.Id;
d.ScanDateTime = scanDateTime;
d.SrNo = ++SrNo;
Data.Add(d);
}
return Data;
}

同样,我为每个 22 个表编写了代码,当我处理那组特定对象时会调用这些函数。

如何创建一个通用方法,以便摆脱 22 个具有重复代码的函数?

我也在下面发布我的信息类。

public class Information
{
public List<Software> Software{get;set;}
public List<Users> Users{get;set;}
}

现在我的 Software 和 Users 类如下所示,带有一个名为 ICommonColumns 的接口(interface)实现。

public interface ICommonColumns
{
DateTime DCDTime{get;set;}
DateTime LastModDTime{get;set}
.....
and others common fields
}

public class Software : ICommonColumns
{
....
}

public class Users : ICommonColumns
{
....
}

最佳答案

为什么不让 POCO 实现接口(interface)并创建接受该接口(interface)实现的方法?

编辑:

public interface ISomething
{
public DateTime DCDTime { get; set; }
public DateTime LastModDTime { get; set; }
public int ID { get; set; }
public DateTime ScanDateTime { get; set; }
public int SrNo { get; set; }
}
private IEnumerable<T> GetSoftwareEntityData<T>(Information request, DateTime scanDateTime, Func<Information, T> someCollection)
where T : ISomething
{
int SrNo = 0;

foreach (var item in someCollection(request))
{
item.DCDTime = DateTime.Now;
item.LastModDTime = scanDateTime;
item.ID = request.Id;
item.ScanDateTime = scanDateTime;
item.SrNo = ++SrNo;

yield return item;
}
}

关于C# 避免重复代码,使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com