制作一个功能而不是两个
Making one function instead of two
我有两个功能:
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;
}
我重命名了函数、项目和属性以使事情变得更简单。我想做的是一个功能,可能更简单——而不是这两个。如何实现?
属性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;
}
用法:
getAllProperties(e => e.property1);
使用 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);
你真的需要这样的方法吗:
List<string> allUniqueProp1 = getItems()
.Select(x => x.property1)
.Where(s => s != null)
.Distinct()
.ToList();
与 property2
相同,你就完成了
我有两个功能:
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;
}
我重命名了函数、项目和属性以使事情变得更简单。我想做的是一个功能,可能更简单——而不是这两个。如何实现?
属性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;
}
用法:
getAllProperties(e => e.property1);
使用 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);
你真的需要这样的方法吗:
List<string> allUniqueProp1 = getItems()
.Select(x => x.property1)
.Where(s => s != null)
.Distinct()
.ToList();
与 property2
相同,你就完成了