我有两个功能:
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;
}
我重命名了函数,项目和属性,使事情变得更简单。我想要做的是一个功能,可能更简单 - 而不是这两个。怎么做到这一点?
Property1和Property 2都是字符串属性。
答案 0 :(得分:4)
你真的需要这方法:
List<string> allUniqueProp1 = getItems()
.Select(x => x.property1)
.Where(s => s != null)
.Distinct()
.ToList();
与property2
相同,您已完成
答案 1 :(得分:1)
代码:
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;
}
用法:
getAllProperties(e => e.property1);
答案 2 :(得分:1)
使用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;
}
然后使用:
GetAll(item => item.Property1);
GetAll(item => item.Property2);