c# - C#统一重复方法不同的参数类型
问题描述
我不得不复制这种方法(由另一个人制作)但我想知道是否有办法统一它,
这个收到一个IList<ViewModelA>
,我需要传递给它IList<ViewModelB>
fatherId
具有不同的属性,但方法中使用的属性相同Items
我想知道是否有办法将这些方法与继承或接口或其他东西统一起来。
private IList<ViewModelA> TrasnformToTree(IEnumerable<ViewModelA> source)
{
var modelGroups = source.GroupBy(i => i.fatherId);
var roots = modelGroups.FirstOrDefault(g => g.Key.HasValue == false).ToList();
if (roots.Count > 0)
{
var dict = modelGroups.Where(g => g.Key.HasValue)
.ToDictionary(g => g.Key.Value, g => g.ToList());
for (int i = 0; i < roots.Count; i++)
{
if (dict.ContainsKey(roots[i].Id))
{
roots[i].Items = dict[roots[i].Id];
for (int j = 0; j < roots[i].Items.Count; j++)
AddChildren(roots[j].Items[j], dict);
}
else
{
roots[i].Items = new List<ViewModelA>();
}
}
}
return roots;
}
解决方案
这应该适用于我看到的代码:
private interface ISomeInterface<T>
{
int Id { get; set; }
int? fatherId { get; set; }
List<T> Items { get; set; }
}
private IList<T> TrasnformToTree<T>(IEnumerable<T> source) where T : ISomeInterface<T>
{
var modelGroups = source.GroupBy(i => i.fatherId);
var roots = modelGroups.FirstOrDefault(g => g.Key.HasValue == false).ToList();
if (roots.Count > 0)
{
var dict = modelGroups.Where(g => g.Key.HasValue)
.ToDictionary(g => g.Key.Value, g => g.ToList());
for (int i = 0; i < roots.Count; i++)
{
if (dict.ContainsKey(roots[i].Id))
{
roots[i].Items = dict[roots[i].Id];
for (int j = 0; j < roots[i].Items.Count; j++)
AddChildren(roots[j].Items[j], dict);
}
else
{
roots[i].Items = new List<T>();
}
}
}
return roots;
}
推荐阅读
- java - 可以将Java静态方法可视化为python中的函数+具有相同名称的实例方法(作为函数)吗?
- cxf - 在 Karaf 的 feature.xml 中,是否可以添加一个 repo?
- python - 通过引用改变python传入对象
- javascript - 我在哪里找到 add_PropertyChanged() 函数
- python - 在 Pandas 中创建数据透视表 (SqlAlchemy)
- python - 是否可以从 ttk 标签或按钮中获取文本并将其分配给变量?
- javascript - 如何在调用 window.location.href 后运行函数?
- c++ - 简单构造函数的复杂编译器输出
- javascript - 为什么提交在移动浏览器上不起作用?
- smarty - 如何使用 smarty 显示特殊字符,例如 '%'?