我創建了四種方法來基于多個引數獲取作業過濾器:
bool FilterAreas(AreaPlaceCoordinate apc)
{
if (!AreaHash.Any())
{
return true;
}
foreach (var _ in AreaHash.Where(h => apc.AreaName.Contains(h, StringComparison.OrdinalIgnoreCase)).Select(h => new { }))
{
return true;
}
return false;
}
bool FilterPlaces(AreaPlaceCoordinate apc)
{
if (!PlaceHash.Any())
{
return true;
}
foreach (var _ in PlaceHash.Where(h => apc.PlaceName.Contains(h, StringComparison.OrdinalIgnoreCase)).Select(h => new { }))
{
return true;
}
return false;
}
bool FilterCoordinates(AreaPlaceCoordinate apc)
{
if (!CoordinateHash.Any())
{
return true;
}
foreach (var _ in CoordinateHash.Where(h => apc.CoordinateName.Contains(h, StringComparison.OrdinalIgnoreCase)).Select(h => new { }))
{
return true;
}
return false;
}
bool Filter(AreaPlaceCoordinate apc)
{
return FilterCoordinates(apc)&&FilterPlaces(apc)&& FilterAreas(apc);
}
我認為可以用一種方法來完成,但是盡管嘗試了很多次,我還是不知道如何處理。這些是我在示例中使用的物件:
//Hash
private IEnumerable<string> PlaceHash { get; set; } = new HashSet<string>() { };
private IEnumerable<string> AreaHash { get; set; } = new HashSet<string>() { };
private IEnumerable<string> CoordinateHash { get; set; } = new HashSet<string>() { };
public class AreaPlaceCoordinate
{
public int CoordinateId { get; set; }
public string CoordinateName { get; set; }
public int AreaId { get; set; }
public int PlaceId { get; set; }
public string AreaName { get; set; }
public string PlaceName { get; set; }
}
我很感激任何想法
uj5u.com熱心網友回復:
我相信你想要的是使用謂詞,你可以有一個通用方法,你也可以傳遞謂詞。 https://docs.microsoft.com/en-us/dotnet/api/system.predicate-1?view=net-6.0
如果您對泛型不是很熟悉,您還可以使用 where 指定泛型的基本型別。 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/where-generic-type-constraint
uj5u.com熱心網友回復:
如果您無法通過我之前的評論解決您的問題,請執行以下操作:
bool Filter<T>(IEnumerable<string> list, T apc, Func<string, bool> p)
{
if (!list.Any())
{
return true;
}
return list.Any(p);
}
public void testFilter()
{
AreaPlaceCoordinate coord = new AreaPlaceCoordinate();
Func<string, bool> selector = str => coord.AreaName.Contains(str);
this.Filter(PlaceHash, coord, selector);
}
您將不得不針對您想要實作的目標進行一些修改,并為不同的過濾器創建不同的選擇器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/360820.html
