【问题标题】:Can I declare a local variable that directly modifies a class field我可以声明一个直接修改类字段的局部变量吗
【发布时间】:2016-12-02 16:43:17
【问题描述】:

所以,我有一个类有一个名为“timers”的Dictionary<string,System.Timers.Timer>,并且我在该类中有一个访问“timers”字段的方法:

public static void Save(FastColoredTextBox editor) //this works fine
{
    timers[(string)editor.Tag].Dispose();

    timers[(string)editor.Tag] = new Timer(Timeout*1000) { AutoReset = false };
    timers[(string)editor.Tag].Elapsed += TimerElapsed;
    timers[(string)editor.Tag].Start();
}

如您所见,我使用timers[(string)editor.Tag],因为当我设置这样的变量时:

public static void Save(FastColoredTextBox editor) //doesn't modify the Dictionary
{
    var timer = timers[(string) editor.Tag];
    timer.Dispose();

    timer = new Timer(Timeout*1000) { AutoReset = false };
    timer.Elapsed += TimerElapsed;
    timer.Start();
}

timer”被声明为局部变量,不会修改Dictionary

那么,我可以在第二个示例中设置一个像“timer”这样的局部变量来修改类字段Dictionary,还是我必须使用像在第一个例子?

【问题讨论】:

  • C# 没有全局变量。你可以有一个静态字段,但它必须是某种类型的一部分。
  • 看看属性或汽车属性..也做一个谷歌搜索并阅读Scope并了解哪个优先

标签: c# dictionary timer


【解决方案1】:

您可以采用混合方法:

string tag = (string)editor.Tag;
timers[tag].Dispose();

var timer = new Timer(Timeout*1000) { AutoReset = false };
timer.Elapsed += TimerElapsed;
timer.Start();

timers[tag] = timer;

【讨论】:

  • 这就是我一直在寻找的。谢谢!
猜你喜欢
  • 2010-10-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多