C#6.0至< 6

时间:2016-08-02 05:29:55

标签: c#

我需要将C# 6.0中的以下代码转换为适用于.NET framework 4.5的较低版本。

  public ImageCollection Strokes { get;  } = new ImageCollection();  //C# 6.0

我该怎么转换呢?

尝试了以下代码,但在应用程序中几乎没有问题。

  public ImageCollection Strokes
        { get { return new ImageCollection(); } }   //< 6.0

请帮助。还有什么方法可以转换这些?通常我会在6.0中获得解决方案,我必须降级。

4 个答案:

答案 0 :(得分:3)

您将不得不在构造函数中分配属性。

选项1 - 具有私人设定者的属性:

class Example
{
    public ImageCollection Strokes { get; private set; }

    public Example()
    {
        Strokes = new ImageCollection();
    }
}

选项2 - 仅具有getter的属性,由私有只读字段支持:

class Example
{
    public ImageCollection Strokes { get { return _strokes; } }

    private readonly ImageCollection _strokes;

    public Example()
    {
        _strokes = new ImageCollection();
    }
}

选项3 - 与选项2类似,但是在内联而不是在构造函数中指定字段:

class Example
{
    public ImageCollection Strokes { get { return _strokes; } }

    private readonly ImageCollection _strokes = new ImageCollection();
}

答案 1 :(得分:3)

它不一样。

在第一个示例中,您有一个将通过构造函数实例化的属性。

在第二个示例中,每次访问该属性时都会返回一个新实例。

正确的重构看起来像这样:

public ImageCollection Strokes
{ 
    get; private set; 
} 

public constructor() 
{
    Strokes = new ImageCollection();
}

答案 2 :(得分:1)

您可以创建getter使用的私有字段:

class MyClass
{
    private ImageCollection _strokes = new ImageCollection();
    public ImageCollection Strokes { get { return _strokes }  }
 }

或者你可以在构造函数中初始化它。

class MyClass
{
    public ImageCollection Strokes { get; private set; }

    public MyClass()
    {
          Strokes = new ImageCollection();
    }
}

请记住在类的所有构造函数中初始化它,或者至少让其他构造函数调用构造函数。

您的解决方案的问题是,每次调用ImageCollection时,它都会返回get的新实例。这产生了多个彼此无关的东西。换一个不会改变其余部分。

答案 3 :(得分:0)

我不知道你面临的问题,但改变代码如下 您的代码始终创建新对象,但6.0一次初始化 试试

var imgCollection = new ImageCollection(); 

public ImageCollection Strokes
    { get { return imgCollection; } }   //< 6.0