C#在方法中打印出ref string

时间:2015-11-06 19:23:46

标签: c#

如何实现以下目标:

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);         }
    }

2 个答案:

答案 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;

这也比通过引用传递更可取,因为负责更新出价的对象不会放弃对它的控制(打破封装)。