问题描述
|
可能是一些简单的事情我忽略了如何解决?
注意:编译器会产生0个错误,但不会生成
/**
* The action (optional object[] is the params)
*/
private Action<object[]> action;
/**
* Parameters
*/
private object[] parameters;
public virtual void runAction() //<- this is overridable
{
action(parameters);
}
public void setAction(Action action)
{
this.action<null> = action<null>;
}
public void setAction(Action action,params object[] parameters)
{
this.parameters = this.parameters;
this.action<parameters> = action<parameters>;
}
也许即使没有without1,我也有办法做到这一点。
我在这堂课之外叫runAction
。 List all我称之为runAction
方法有很多这样的类。我按需生成这些类。此类包含的逻辑比您看到的还要多。
让我知道,谢谢我的支持。
解决方法
this.action<parameters> = action<parameters>;
真是一团糟。 “ 5”不是泛型类型或泛型方法,因此它没有提供泛型参数(无论如何,泛型参数是类型,而不是变量。实际上,您在某种程度上使用了小于和大于关系运算符?但是ѭ6不会比较任何东西。
编译器绝对正确,不要让它生成。看来这就是您想要的:
private Action action;
public virtual void runAction()
{
action();
}
public void setAction(Action action)
{
this.action = action;
}
public void setAction(Action<object[]> action,params object[] parameters)
{
this.action = delegate { action(parameters) };
}
我建议您阅读有关\“ closures \”的内容。您可能会发现您正在编写的此类根本不是很有用。
, 我不认为ѭ8支持可变数量的参数。我认为您可以这样做:
public void RunAction(Action<object[]> action,params object[] parameters)
{
action(parameters);
}
最终将被使用类似:
RunAction( x =>
{
Assert.AreEqual(\"Param1\",x[0]);
Assert.AreEqual(\"Param2\",x[1]);
},\"Param1\",\"Param2\");
还是我在尝试做的事情中缺少某些东西?
, 由于您使用的是VS 2010和.Net 4.0? ...尝试
public void setAction(Action action,object[] parameters = null)
{
this.parameters = this.parameters;
this.action<parameters> = action<parameters>;
}
您正在创建一个\'optional \'参数。
, 如果您尝试使用可选参数,以便在不需要附加参数时可以进行更短的调用,而您只使用1-2个参数,则可以执行以下操作:
定义两个动作,一个动作接受第一个参数,另一个动作接受两个参数(例如):
private readonly Action<EventType> _updateLog;
private readonly Action<EventType,string> _updateLogWithDescription;
实例化操作后,只需为该操作分配两个参数作为输入参数,并在调用另一个操作并为其提供默认参数的基础上,使用一个参数计算该操作,例如:
public MyClass(Action<EventType,string> updateLogWithDescription)
{
_updateLogWithDescription = updateLogWithDescription;
_updateLog = (EventType eventType) => updateLogWithDescription(eventType,string.Empty);
}
然后,您只需要担心执行所有内部计算的1个源操作,然后在实际调用该类的类中,将根据需要使用两个实例:
_updateLog(EventType.MyEvent);
_updateLogWithDescription(EventType.MyOtherEvent,$\"My custom data {myvalue}\");
我更喜欢使用它作为我的解决方案,因为我真的不喜欢用object[]
和铸造。