【发布时间】:2023-01-22 22:18:50
【问题描述】:
我正在尝试创建一个通用函数,该函数可以获取具有开始日期时间和结束日期时间的对象列表,如果它们彼此紧接且没有间隙,则将它们组合起来。
public static IEnumerable<T> MakeBlocks<T>(IEnumerable<T> input)
{
List<T> outList = new List<T>();
if (input.Count() == 0) return outList;
T thisEntry = input.First();
foreach (var nextEntry in input.Skip(1))
{
if ( nextEntry != null && nextEntry.StartDT == thisEntry.EndDT)
{
thisEntry.EndDT = nextEntry.EndDT;
}
else
{
outList.Add(thisEntry);
thisEntry = nextEntry;
}
}
outList.Add(thisEntry);
return outList;
}
如果我知道“From”和“to”属性的名称,这就可以正常工作,但是我如何使用泛型来做到这一点?
上述伪示例中的“未知”属性称为 StartDT 和 EndDT,但它们可以称为任何名称。
在 JavaScript 中,我可以只提供属性名称作为字符串,但在 C# 中不行。
这可能吗?如何实现?
【问题讨论】:
-
为什么在编写代码时没有已知的属性名称?
-
您还可以使用 lambda 来告诉函数要访问和设置哪些属性,以避免必须使用特定的基类。如果您编写的类不能全部使用相同的基类,这将很有帮助。