如何实现以下目标:
public void PrintText(ref string currentBid)
{
Console.WritleLine(currentBid);
}
目前,我收到以下错误:
Cannot use ref or out parameter in annonymous method...
编辑:
以下是完整的方法:
public static void writeToFileUK(string FolderName, ref string currentBid)
{
TimeSpan start = new TimeSpan(08, 00, 00);
TimeSpan end = new TimeSpan(16, 30, 00);
var timer = new System.Threading.Timer((e) =>
{
try
{
string fileName = @"C:\Users\Documents\Stocks\" + FolderName + "\\" + DateTime.Now.ToString("yyy-MM-dd") + ".txt";
if (!File.Exists(fileName))
File.WriteAllText(fileName, "Time, Bid" + Environment.NewLine);
string text = DateTime.Now.ToString("HH-mm-ss") + ", " + currentBid;
if (DateTime.Now.TimeOfDay >= start && DateTime.Now.TimeOfDay <= end)
{
using (StreamWriter stream = new StreamWriter(fileName, true))
{
stream.WriteLine(text);
}
}
}
catch { }
}, null, 0, 1000);
Console.Read();
}
try
{
Task.Run(() => writeToFileUK("HSBC", ref CurrentHSBCBid));
}
catch { }
这个方法将整天每秒调用一次,我希望它将ref字符串打印到文本文件
public override void OnUpdate(int itemPos, string itemName, IUpdateInfo update)
{
try
{
var str = GetL1Prices(itemPos, itemName, update);
var updateTime = update.GetNewValue("UPDATE_TIME");
var bid = update.GetNewValue("BID");
if(itemName == "L1:IX.D.DOW.DAILY.IP")
Program.CurrentDOWBid = bid;
}
catch(Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
答案 0 :(得分:6)
不要通过引用传递字符串。你没有改变变量,所以没有理由通过引用传递它。当您按值(默认行为)传递它时,您在匿名方法中使用它时会遇到任何问题,该方法不支持使用ref
参数调用方法。
答案 1 :(得分:2)
将参考字符串传递给您的匿名方法是不可能的,而是传入一个类,该类维护您希望定期更新的字符串的所有权。
class BidUpdater
{
private string _currentBid;
public string CurrentBid { get { return currentBid; } }
private void updateBid()
{
/* update logic goes here */;
}
}
然后
Task.Run(() => writeToFileUK("HSBC", myBidUpdater));
其中myBidUpdater是BidUpdater
的实例。
然后用
替换你对结果的使用string text = DateTime.Now.ToString("HH-mm-ss") + ", " + myBidUpdater.CurrentBid;
这也比通过引用传递更可取,因为负责更新出价的对象不会放弃对它的控制(打破封装)。