C# 使一个函数代替两个函数
我有两个职能:C# 使一个函数代替两个函数,c#,function,generics,refactoring,C#,Function,Generics,Refactoring,我有两个职能: public List<string> getAllProperties1() { List<string> output = new List<string>(); foreach (MyItem item in getItems()) { if (!output.Contains(item.property1) && item.property1 != null
public List<string> getAllProperties1()
{
List<string> output = new List<string>();
foreach (MyItem item in getItems())
{
if (!output.Contains(item.property1) &&
item.property1 != null)
{
output.Add(item.property1);
}
}
return output;
}
public List<string> getAllProperties2()
{
List<string> output = new List<string>();
foreach (MyItem item in getItems())
{
if (!output.Contains(item.property2) &&
item.property2 != null)
{
output.Add(item.property2);
}
}
return output;
}
公共列表getAllProperties1()
{
列表输出=新列表();
foreach(getItems()中的MyItem项)
{
如果(!output.Contains)(item.property1)&&
item.property1!=空)
{
输出。添加(项目。属性1);
}
}
返回输出;
}
公共列表getAllProperties2()
{
列表输出=新列表();
foreach(getItems()中的MyItem项)
{
如果(!output.Contains)(item.property2)&&
item.property2!=null)
{
输出。添加(项目。属性2);
}
}
返回输出;
}
我重命名了函数、项和属性,使事情变得更简单。我想做的是一个函数,可能更简单-而不是这两个。如何做到这一点
属性1和属性2都是字符串属性 代码:
public List<string> getAllProperties(Func<MyItem, string> func)
{
List<string> output = new List<string>();
foreach (MyItem item in getItems())
{
string value = func(item);
if (!output.Contains(value) &&
value != null)
{
output.Add(value);
}
}
return output;
}
代码:
使用Func作为策略,从单个方法获取比较属性和调用:
public List<string> GetAll(Func<MyItem, string> propertyGetter)
{
List<string> output = new List<string>();
foreach (MyItem item in getItems())
{
var value = propertyGetter(item);
if (!output.Contains(value) && value != null)
{
output.Add(value);
}
}
return output;
}
使用Func作为策略,从单个方法获取比较属性和调用:
public List<string> GetAll(Func<MyItem, string> propertyGetter)
{
List<string> output = new List<string>();
foreach (MyItem item in getItems())
{
var value = propertyGetter(item);
if (!output.Contains(value) && value != null)
{
output.Add(value);
}
}
return output;
}
您真的需要这种方法吗:
List<string> allUniqueProp1 = getItems()
.Select(x => x.property1)
.Where(s => s != null)
.Distinct()
.ToList();
List allUniqueProp1=getItems()
.选择(x=>x.property1)
。其中(s=>s!=null)
.Distinct()
.ToList();
property2也一样
,您已经完成了您真的需要实现这一点的方法吗:
List<string> allUniqueProp1 = getItems()
.Select(x => x.property1)
.Where(s => s != null)
.Distinct()
.ToList();
List allUniqueProp1=getItems()
.选择(x=>x.property1)
。其中(s=>s!=null)
.Distinct()
.ToList();
与
property2
相同,代码改进属于您。可能重复的@TimSchmelter此代码已从上下文中删除(使用占位符名称而不是实值),这使其脱离主题成为“示例代码”在CR上。代码改进属于。@TimSchmelter的可能副本此代码已从上下文中删除(使用占位符名称而不是实际值),这使得它在CR上作为“示例代码”脱离主题。