C# 通用委托实现
我正在努力解决以下问题 声明一个泛型委托类型操作,该操作的返回类型为void,并将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
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()