使扩展类通用

时间:2013-09-19 09:19:37

标签: c# generics extension-methods

我有这样一段代码:

using System.Collections.Generic;
using System.Linq;

namespace PricingCoefficientService.Extensions
{
    public static class IntExt
    {
        public static bool IsIn(this int integer, IEnumerable<int> collectionOfIntegers)
        {
            return collectionOfIntegers.Contains(integer);
        }
    }
}

它是一个扩展int的扩展方法。我相信它的功能是显而易见的。

但是如果我不想让它变得通用以使其可用于每个值类型或对象呢?

任何想法?

谢谢

3 个答案:

答案 0 :(得分:2)

只需将方法设为通用

即可
public static bool IsIn<T>(this T value, IEnumerable<T> collection)
{
    if (collection == null)
    {
        throw new ArgumentNullException("collection");
    }

    return collection.Contains(value);
}

答案 1 :(得分:1)

试试这段代码:

public static bool IsIn<T>(this T generic, IEnumerable<T> collection)
{
    if(collection==null || collection.Count()==0) return false; // just for sure
    return collection.Contains(generic);
}

它由T输入,可以是任何类型,现在你可以写:

var list = new List<double>() {1,2,3,4};
double a = 1;
bool isIn = a.IsIn(list);

答案 2 :(得分:1)

如果需要值类型

public static bool IsIn(this ValueType integer, IEnumerable<int> collectionOfIntegers)
{
....
}