我过去只使用了几次扩展方法,如果这是一个非常愚蠢的问题,请原谅我。
我有3个不同的字符串数组,我还想在这些数组中搜索3个字符串。
到目前为止,我有这样的事情:
if (list1.Any(x => x == term1) && list2.Any(x => x == term2) && list3.Any(x => x == term3))
{
//do something
}
因此,如果找到所有术语,则if语句应为= true。
我试图用扩展方法解决的问题是....
有一种可能性term1,term2,term3的值可以是" -1"如果是这种情况,我想在if语句中忽略它。
所以我的问题是,这可以通过扩展方法完成吗?因此,我可以使用list.MyMethod()代替使用list.Ay(),如果任何术语的值为-1,则返回true。
答案 0 :(得分:1)
当然,你可以使用扩展方法。 是否完全是一个不同的问题。
public static class MyExtensions
{
public static bool MyMethod<T>(this IEnumerable<T> list, T term)
{
if(term != null && term.ToString() == "-1")
return false; // or true, whichever is your requirement.
return list.Any(x => x == term);
}
}
使用
if(list1.MyMethod(term1) && list2.MyMethod(term2) && list3.MyMethod(term3)) { ... }
NB。无论你做什么,都不要称它为MyMethod
!
答案 1 :(得分:1)
您可以定义一个相当简单的方法来执行此操作。我会假设字符串,但是使用泛型并不是太难了(只是通过弄清楚-1通常是什么来进入奇怪的逻辑):
static class MyExtensions
{
public static bool AnyOrMinusOne(this IEnumerable<string> list, string term)
{
return term == "-1" || list.Any(x => x == term);
}
}
然后你的陈述变成:
if (list1.AnyOrMinusOne(term1) && list2.AnyOrMinusOne(term2) && list3.AnyOrMinusOne(term3))
{
//do something
}