C# 通用委托实现

C# 通用委托实现,c#,generics,delegates,C#,Generics,Delegates,我正在努力解决以下问题 声明一个泛型委托类型操作,该操作的返回类型为void,并将T值作为参数。这是对昨天的委托类型的概括。 声明具有方法的类 static void Perform(动作动作,参数T[]arr){…} 此方法应将委托操作应用于数组arr的每个元素。在实现方法Perform时,请使用foreach语句 到目前为止,我的代码如下所示: namespace CSharpexercices { public delegate void Action<T>(T val

我正在努力解决以下问题

声明一个泛型委托类型操作,该操作的返回类型为void,并将
T
值作为参数。这是对昨天的委托类型的概括。 声明具有方法的类

static void Perform(动作动作,参数T[]arr){…}

此方法应将委托操作应用于数组arr的每个元素。在实现方法
Perform
时,请使用
foreach
语句

到目前为止,我的代码如下所示:

namespace CSharpexercices
{
    public delegate void Action<T>(T value);

    public class GenericDelegate
    {
        static void Perform<T>(Action<T> act, params T[] arr)
        {
            foreach (T i in arr)
            {
               act(arr[i]);
            }
        }
    }
}
namespace csharpcies
{
公共代表无效操作(T值);
公共类泛型委托
{
静态无效执行(动作动作,参数T[]arr)
{
foreach(在arr中的ti)
{
法案(arr[i]);
}
}
}
}
它工作不正常,我对“这是昨天的委托类型输入的概括”部分感到迷茫

谁能帮我个忙吗:)

如果你换了衣服怎么办

arr[i] = act(arr[i]);

请记住,
act
返回
void
,因此没有可分配的返回值

这是对昨天的委托类型的概括

这可能指的是一种类似的方法,您调用的是
Action-act
,而不是
Action-act

编辑: 当然,通过
arr
的迭代应该是:

for (T obj in arr) 
{ 
    act(obj); 
} 
如果你改变了怎么办

arr[i] = act(arr[i]);

请记住,
act
返回
void
,因此没有可分配的返回值

这是对昨天的委托类型的概括

这可能指的是一种类似的方法,您调用的是
Action-act
,而不是
Action-act

编辑: 当然,通过
arr
的迭代应该是:

for (T obj in arr) 
{ 
    act(obj); 
} 

操作没有返回类型,因此无法执行类似操作

arr[i] = act(arr[i]);
其次,不能在foreach中迭代int数据类型

已编辑

public delegate void Action<T>(T value);

public class GenericDelegate
{
    static void Perform<T>(Action<T> act, params T[] arr)
    {
        foreach (T obj in arr)
        {
            act(obj);
        }
    }
}
公共委托无效操作(T值);
公共类泛型委托
{
静态无效执行(动作动作,参数T[]arr)
{
foreach(arr中的T obj)
{
法案(obj);
}
}
}

操作没有返回类型,因此无法执行类似操作

arr[i] = act(arr[i]);
其次,不能在foreach中迭代int数据类型

已编辑

public delegate void Action<T>(T value);

public class GenericDelegate
{
    static void Perform<T>(Action<T> act, params T[] arr)
    {
        foreach (T obj in arr)
        {
            act(obj);
        }
    }
}
公共委托无效操作(T值);
公共类泛型委托
{
静态无效执行(动作动作,参数T[]arr)
{
foreach(arr中的T obj)
{
法案(obj);
}
}
}

IntAction是一种委托类型(一种表示方法引用的类型,如C++中的函数指针)

很可能您的指导老师声明如下:

public delegate void IntAction(int input);
因此,它表示一个方法,它接受一个
int
并返回
void
。要概括这个,你的家庭作业要求你对这样一个委托进行概括。它希望你创建一个方法,它接受任何类型的对象,比如说类型T,并返回void。这确实是委托系统。就像你使用b一样但我认为您的家庭作业要求您声明该委托类型。这是您的操作方式(我称为委托泛型操作,您将以与使用操作完全相同的方式使用它):


如果需要更多说明,请随时修改您的问题或注释。

IntAction是一种委托类型(表示对方法的引用的类型,如C++中的函数指针)

很可能您的指导老师声明如下:

public delegate void IntAction(int input);
因此,它表示一个方法,它接受一个
int
并返回
void
。要概括这个,你的家庭作业要求你对这样一个委托进行概括。它希望你创建一个方法,它接受任何类型的对象,比如说类型T,并返回void。这确实是委托系统。就像你使用b一样但我认为您的家庭作业要求您声明该委托类型。这是您的操作方式(我称为委托泛型操作,您将以与使用操作完全相同的方式使用它):


如果您需要更多的澄清,请随时修改您的问题或评论。

您可以用调用
执行的代码编辑您的问题吗?您可以用调用
执行的代码编辑您的问题吗?我不是为了这个MZN上学的,我没有任何作弊行为,只是因为我是stuck.哈哈,这看起来完全像是家庭作业。对不起,我只是在开玩笑。这个答案有用吗?:)我在网上找到了练习表,不要抱歉,谢谢你的帮助:是的,我仍在努力把所有的东西放在一起。所以我应该使用for循环,然后他提到foreach循环哦,你让我注意到了另一个错误foreach循环中的r!“i”将逐个表示params数组中的值,因此我们不需要使用索引器([])。因此正确的方法是调用act(i)。我会编辑答案。我不会为了这个MZN去学校,我没有作弊,只是想理解,因为我被卡住了。哈哈,这看起来完全像是家庭作业。对不起,我只是在开玩笑。这个答案有用吗?:)我在网上找到了练习表,不要抱歉,谢谢你的帮助:是的,我还在试着放e所以我应该使用for循环,然后他提到了foreach循环哦,你让我注意到了另一个错误!foreach循环中的“I”将逐个表示参数数组中的值,因此我们不需要使用索引器([])。因此正确的方法是调用act(I)。我将编辑答案。或者
foreach(T obj in arr){act(obj);}
我会避免在
for
循环中使用
.Count()