c# 编写扩展方法以扩展 System.Linq 中的功能
c# Writing an extension method to extend functionality in System.Linq
我过去只使用过几次扩展方法,如果这是一个非常愚蠢的问题,请原谅。
我有 3 个不同的字符串数组,我还有 3 个要在这些数组中搜索的字符串。
到目前为止我有这样的东西:
if (list1.Any(x => x == term1) && list2.Any(x => x == term2) && list3.Any(x => x == term3))
{
//do something
}
因此,如果找到所有项,则 if 语句应该 = true。
我试图用扩展方法解决的问题是....
如果我想在 if 语句中忽略它,那么 term1、term2、term3 的值可能为“-1”。
所以我的问题是,这可以用扩展方法来完成吗?因此,我可以使用 list.MyMethod() 而不是使用 list.Any() ,如果任何一项的值为 -1,则 return 为真。
当然,您可以使用扩展方法。你是否应该完全是一个不同的问题。
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)) { ... }
注意。不要随便叫它MyMethod
!
您可以定义一个相当简单的方法来执行此操作。我会假设字符串,但是使用泛型并不太难(只是通过弄清楚 -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
}
我过去只使用过几次扩展方法,如果这是一个非常愚蠢的问题,请原谅。
我有 3 个不同的字符串数组,我还有 3 个要在这些数组中搜索的字符串。
到目前为止我有这样的东西:
if (list1.Any(x => x == term1) && list2.Any(x => x == term2) && list3.Any(x => x == term3))
{
//do something
}
因此,如果找到所有项,则 if 语句应该 = true。
我试图用扩展方法解决的问题是....
如果我想在 if 语句中忽略它,那么 term1、term2、term3 的值可能为“-1”。
所以我的问题是,这可以用扩展方法来完成吗?因此,我可以使用 list.MyMethod() 而不是使用 list.Any() ,如果任何一项的值为 -1,则 return 为真。
当然,您可以使用扩展方法。你是否应该完全是一个不同的问题。
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)) { ... }
注意。不要随便叫它MyMethod
!
您可以定义一个相当简单的方法来执行此操作。我会假设字符串,但是使用泛型并不太难(只是通过弄清楚 -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
}