如何创建一个允许数组像单个值一样的方法?

时间:2017-05-29 00:38:53

标签: c# arrays generics delegates

这是一种假设方法,允许数组使用单个对象可以使用的函数。这将允许数组使用仅对单个对象可用的方法。我只需要一个在所有类型的数组上运行的泛型方法。此方法将对该数组的各个值运行另一种方法。然后这些单独的值将作为数组返回。这适用于所有类型。如果可能,此方法不应对哪些对象可以使用它有任何约束。重复一遍,代码中的任何位置都没有约束。这可能是另一种形式吗?这在C#中是否合法?

string[] s = new string[] { "hi", "hello", "what's up" }
static void Main(string[] args)
{
    string[] newS = s.ArrayTo(() => string.Remove(0,1));
    foreach(string str in newS)
        Console.WriteLine(str);
}
static class Ext
{
    static T[] ArrayTo<T>(this T[] t,Action a)
    {
        List<T> ret = new List<T>();
        foreach(T tOb in t)
        {
            ret.Add(
            //t.a());  This line doesn't work
        }
        return ret.ToArray();
    }
}

输出:i,ello,hat&#39;

1 个答案:

答案 0 :(得分:0)

不要使用这个答案,只需使用Select()方法就更简单了。

class Program
{
    static void Main(string[] args)
    {
        string[] s = new string[] { "hi", "hello", "what's up" };
        string[] newS = s.ArrayTo<string>(x => x.Remove(0, 1) );
        foreach (string str in newS)
            Console.WriteLine(str);
    }
}
static class Ext
{
    public static T[] ArrayTo<T>(this T[] t, Func<T,T> a)
    {
        List<T> ret = new List<T>();
        foreach (T tOb in t)
        {
            ret.Add(
                a(tOb));
        }
        return ret.ToArray();
    }
}