如何在课堂上初始化参考?

时间:2017-04-14 05:28:57

标签: c# ref

我需要这样的东西

public class Displayer
{
    public ref string[] lines { get; set; }
}

但我没有找到任何解决方案。 我"应用程序的完整代码"是:

 public class Displayer
{
    public ref string[] lines { get; set; }
    public async void Update()
    {
        while(true)
        {
           Console.Clear();
           foreach(string s in lines)
           {
              Console.WriteLine(s);
           }
        }
    }
}   

1 个答案:

答案 0 :(得分:2)

这是完全错误的。您的Displayer类不必要地一遍又一遍地更新控制台。每秒千次。这不符合逻辑。

正确的方法是在需要时更新控制台。您的财产需要以另一种方式实施。

public class Displayer
{
    private string[] _lines;

    public string[] Lines
    {
        get { return _lines; }
        set
        {
            // while setting new value call Update
            _lines = value;
            Update();
        }
    }

    public async void Update()
    {
        // update console only once
        Console.Clear();

        foreach (string s in Lines)
        {
            Console.WriteLine(s);
        }
    }
}

如果您想了解收藏中的更改,请改用ObservableCollection

您无需在此处更改参考。因为你总是可以改变集合的大小。

public class Displayer
{
    public Displayer()
    {
        Lines = new ObservableCollection<string>();
        Lines.CollectionChanged += Update; // Update will be called automatically when ever collection changes.
    }

    public ObservableCollection<string> Lines { get; }

    private void Update(object sender, NotifyCollectionChangedEventArgs args)
    {
        // update console only once
        Console.Clear();

        foreach (string s in Lines)
        {
            Console.WriteLine(s);
        }
    }
}