2017-05-29 49 views
-5

这是一个假设的方法,它允许数组使用单个对象可以使用的函数。这将允许数组使用仅可用于单个对象的方法。我只需要在所有类型的数组上运行的泛型方法。此方法将对该数组的各个值运行另一种方法。然后这些单独的值将作为一个数组返回。这将适用于所有类型。如果可能的话,这个方法不应该有对象可以使用它的任何限制。重复一遍,代码中的任何位置都没有限制。这是可能的另一种形式?这在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(); 
    } 
} 

输出:我,ELLO,帽子的达

+0

呃...请解释倒票。 –

+0

你的问题目前还不清楚,请尝试编辑你的答案,你是什么意思:允许数组轻松地运行单个对象?我们很乐意为您提供帮助 – Zinov

+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(); 
    } 
} 
+0

那么......一个漫长的抉择Select(Func).ToArray()?我不明白你为什么创建ret,逐个添加项目,然后将它作为数组返回。只需创建数组(t的长度是已知的)并填充它。 – Martheen

+0

我只是试过了,你可以用ArrayTo替换整个内容: return t.Select(a).ToArray(); 实际上,如果您不需要立即执行,将链接到另一个进程时可能会更快,您可以更加灵活地使用Select。 – Martheen

+0

事情是这适用于所有对象。这就是我一开始想要做的。我的问题中的代码只是一个例子。 –

相关问题