How to create a Between Extension Method

我的未来我决定 提交于 2019-12-21 17:01:24

问题


I have a variable whose value is populated at runtime. I want to check whether that value is between two same datatype values (say lowest and highest) or not using an Extension Method.

I want to check like

int a = 2; //here static but is can be changed at runtime

if(a.Between(0,8))
   DoSomething();
else
   DoNothing();

If a is 0 or 8 or any value between them, it should return true.

If a is (-1 or less) or (9 or greater) then it should return false

i want to create an extension method like

public static bool Between<T1>(this T1 val1, T1 lowest, T1 highest) where ????
{
    What code to write here???? 
}

回答1:


You can do it like this:

public static bool Between<T>(this T actual, T lower, T upper) where T : IComparable<T>
{
    return actual.CompareTo(lower) >= 0 && actual.CompareTo(upper) <= 0;
}

Reference here

Or if you want to do it on a collection you can do this:

public static IEnumerable<TSource> Between<TSource, TResult>
(
    this IEnumerable<TSource> source, Func<TSource, TResult> selector,
    TResult lowest, TResult highest
)
    where TResult : IComparable<TResult>
{
    return source.OrderBy(selector).
        SkipWhile(s => selector.Invoke(s).CompareTo(lowest) < 0).
        TakeWhile(s => selector.Invoke(s).CompareTo(highest) <= 0 );
}

Reference here

Usage:

var tenTo40 = list.Between(s => s, 10, 40);



回答2:


Mixing types will make it harder, eg. if T1 is datetime and t2 is int then what behaviour do you expect?

Using only one type all the way you can use the IComparable interface

public static bool Between<T>(this T self, T lower,T higher) where T : IComparable
{
    return self.CompareTo(lower) >= 0 && self.CompareTo(higher) <= 0;
}



回答3:


Maybe like this:

public static bool Between<T1, T2>(this T1 val1, T2 lowest, T2 highest) where T1 : IComparable where T2 : IComparable {
    return val1.CompareTo(lowest) > 0 && val1.CompareTo(highest) < 0;
}


来源:https://stackoverflow.com/questions/10511034/how-to-create-a-between-extension-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!