C# 如何采取行动<;T>;泛型方法中的参数?
我有以下代码。编译器给出C# 如何采取行动<;T>;泛型方法中的参数?,c#,generics,C#,Generics,我有以下代码。编译器给出 Error CS7036 There is no argument given that corresponds to the required formal parameter 'parameter' of 'SARSystem.WithLock<T>(SARSystem.Locks, Action<T>, T) public class Locks { private Locks() {} priv
Error CS7036 There is no argument given that corresponds to the required formal parameter 'parameter' of 'SARSystem.WithLock<T>(SARSystem.Locks, Action<T>, T)
public class Locks
{
private Locks() {}
private static object _lock = new object();
public static object Lock { get { return _lock; } }
}
public static void WithLock<T>(Locks theLock, Action<T> action, T param)
{
Monitor.Enter(theLock);
{
try
{
action(param);
}
finally
{
Monitor.Exit(theLock);
}
}
}
private static Locks tradingSystemLock;
public void OnQuote(TickPriceMessage tp)
{
// How do I call WithLock? This doesn't work.
WithLock(tradingSystemLock, delegate (TickPriceMessage tpm) { Console.WriteLine(tp.ToString()); });
}
错误CS7036未给出与“SARSystem.WithLock”(SARSystem.Locks,Action,T)的必需形式参数“parameter”相对应的参数
公共类锁
{
私有锁(){}
私有静态对象_lock=新对象();
公共静态对象锁{get{return_Lock;}}
}
带锁的公共静态无效(锁定锁、动作动作、T参数)
{
监视器。进入(锁定);
{
尝试
{
行动(参数);
}
最后
{
监视器。退出(锁定);
}
}
}
私有静态锁交易系统锁;
公开作废OnQuote(TickPriceMessage tp)
{
//我怎么用锁打电话?这不行。
WithLock(tradingSystemLock,delegate(TickPriceMessage tpm){Console.WriteLine(tp.ToString());});
}
根据Lee的评论,您的方法采用三个参数:
WithLock<T>(Locks theLock, Action<T> action, T param)
带锁(锁锁、动作、T参数)
锁定、委托和参数
以下方面应起作用:
public void OnQuote(TickPriceMessage tp)
{
WithLock<TickPriceMessage>(tradingSystemLock, (tpm) => {Console.WriteLine(tpm.ToString());}, tp);
}
public void OnQuote(TickPriceMessage tp)
{
WithLock(tradingSystemLock,(tpm)=>{Console.WriteLine(tpm.ToString());},tp);
}
根据Lee的评论,您的方法采用三个参数:
WithLock<T>(Locks theLock, Action<T> action, T param)
带锁(锁锁、动作、T参数)
锁定、委托和参数
以下方面应起作用:
public void OnQuote(TickPriceMessage tp)
{
WithLock<TickPriceMessage>(tradingSystemLock, (tpm) => {Console.WriteLine(tpm.ToString());}, tp);
}
public void OnQuote(TickPriceMessage tp)
{
WithLock(tradingSystemLock,(tpm)=>{Console.WriteLine(tpm.ToString());},tp);
}
您的操作
调用没有问题,但是您调用函数的方式有问题:
WithLock(tradingSystemLock,
delegate (TickPriceMessage tpm) { Console.WriteLine(tp.ToString()); },
tp);
如果您费心阅读/发布收到的错误消息,这一点会立即显现出来
顺便说一句,你的
加锁不仅没用,而且也错了——我想你想锁定锁。锁
,而不是锁
。可以理解,给定变量的描述性名称。调用操作没有问题,但是调用函数的方式有问题:
WithLock(tradingSystemLock,
delegate (TickPriceMessage tpm) { Console.WriteLine(tp.ToString()); },
tp);
如果您费心阅读/发布收到的错误消息,这一点会立即显现出来
顺便说一句,你的加锁不仅没用,而且也错了——我想你想锁定锁。锁
,而不是锁
。可以理解,给定变量的描述性名称。action(anObjectOfTypeT)代码>谢谢,请参阅我的编辑。另外,您的监视器。输入/监视器。退出/尝试/最后
结构可以简单地表示为锁
块。带锁
接受3个参数,您只提供2个。您需要向带有锁的提供TickPriceMessage
(tp
?)的实例。似乎您想要带锁(tradingSystemLock,delegate(tickpricemessagem){Console.WriteLine(m.ToString());},tp)
@Ivan您可以使用lock(tradingSystemLock,m=>Console.WriteLine(m.ToString()),tp)将其写得更短代码>动作(anObjectOfTypeT)代码>谢谢,请参阅我的编辑。另外,您的监视器。输入/监视器。退出/尝试/最后
结构可以简单地表示为锁
块。带锁
接受3个参数,您只提供2个。您需要向带有锁的提供TickPriceMessage
(tp
?)的实例。似乎您想要带锁(tradingSystemLock,delegate(tickpricemessagem){Console.WriteLine(m.ToString());},tp)
@Ivan您可以使用lock(tradingSystemLock,m=>Console.WriteLine(m.ToString()),tp)将其写得更短代码>在一行代码中包含更多无用的内容:.ToString()
,委托
以及之后的所有内容。另外,你知道,你重新发明轮子而不是使用lock
关键字,因为你似乎认为你可以做得更好。盲目-也许伊万只是想学习如何编码?这样的批评是非常有用的——不幸的是,你的批评并不有用。请尽量少做判断,多帮点忙?在一行代码中有更多无用的东西:.ToString()
,委托
,以及之后的所有事情。另外,你知道,你重新发明轮子而不是使用lock
关键字,因为你似乎认为你可以做得更好。盲目-也许伊万只是想学习如何编码?这样的批评是非常有用的——不幸的是,你的批评并不有用。请尽量少评判,多帮助别人?