C# 在声明中对初始化,怎么做? Frame[]test=新帧[3]{{2,5}、{3,6}、{4,7};

C# 在声明中对初始化,怎么做? Frame[]test=新帧[3]{{2,5}、{3,6}、{4,7};,c#,C#,数组初始值设定项只能在变量或字段初始值设定项中使用。尝试使用新的表达式 这怎么可能呢?你确定不应该是这样吗 Frame<int, int>[] test = new Frame<int, int>[3] {{2,5},{3,6},{4,7}}; Frame[]测试=新帧[3]{ 新框架(2,5), 新框架(3,6), 新框架(4,7) }; 这里的问题是,文本{2,3}本身并不代表帧。它仅用作初始值设定项的一部分,这意味着它必须伴随实例化,如下所示: Frame<

数组初始值设定项只能在变量或字段初始值设定项中使用。尝试使用新的表达式


这怎么可能呢?

你确定不应该是这样吗

Frame<int, int>[] test = new Frame<int, int>[3] {{2,5},{3,6},{4,7}};
Frame[]测试=新帧[3]{
新框架(2,5),
新框架(3,6),
新框架(4,7)
};

这里的问题是,文本
{2,3}
本身并不代表
帧。它仅用作初始值设定项的一部分,这意味着它必须伴随实例化,如下所示:

Frame<int, int>[] test = new Frame<int, int>[3] {
    new Frame<int, int>(2,5),
    new Frame<int, int>(3,6),
    new Frame<int, int>(4,7)
};
// Skeleton code for illustration only.
class Frame<T1, T2>
{
    public Frame(T1 x, T2 y)
    {
        X = x;
        Y = y;
    }

    public T1 X { get; private set; }
    public T2 Y { get; private set; }
}

// IEnumerable (non-)implementation for initializer syntax.
class FrameCollection : IEnumerable
{
    List<Frame<int, int>> _frames;

    public FrameCollection()
    {
        _frames = new List<Frame<int, int>>();
    }

    // Add method to enable initialization syntax using { x, y }.
    public void Add(int x, int y)
    {
        _frames.Add(new Frame<int, int>(x, y));
    }

    public Frame<int, int>[] ToArray()
    {
        return _frames.ToArray();
    }

    // This method doesn't technically need to do anything.
    IEnumerator IEnumerable.GetEnumerator()
    {
        throw new InvalidOperationException();
    }
}
由于
FrameCollection
类定义了一个
Add
方法,该方法接受两个
int
参数,因此我们现在可以编写如下代码:

Frame<int, int>[] test = new Frame<int, int>[3] {
    new Frame<int, int>(2,5),
    new Frame<int, int>(3,6),
    new Frame<int, int>(4,7)
};
// Skeleton code for illustration only.
class Frame<T1, T2>
{
    public Frame(T1 x, T2 y)
    {
        X = x;
        Y = y;
    }

    public T1 X { get; private set; }
    public T2 Y { get; private set; }
}

// IEnumerable (non-)implementation for initializer syntax.
class FrameCollection : IEnumerable
{
    List<Frame<int, int>> _frames;

    public FrameCollection()
    {
        _frames = new List<Frame<int, int>>();
    }

    // Add method to enable initialization syntax using { x, y }.
    public void Add(int x, int y)
    {
        _frames.Add(new Frame<int, int>(x, y));
    }

    public Frame<int, int>[] ToArray()
    {
        return _frames.ToArray();
    }

    // This method doesn't technically need to do anything.
    IEnumerator IEnumerable.GetEnumerator()
    {
        throw new InvalidOperationException();
    }
}
var frames=新帧集合
{
{ 2, 5 },
{ 3, 6 },
{ 4, 7 }
};
foreach(frames.ToArray()中的帧)
{
WriteLine(({0},{1})”,frame.X,frame.Y);
}
输出:

var frames = new FrameCollection
{
    { 2, 5 },
    { 3, 6 },
    { 4, 7 }
};

foreach (Frame<int, int> frame in frames.ToArray())
{
    Console.WriteLine("({0}, {1})", frame.X, frame.Y);
}
(2, 5) (3, 6) (4, 7)
框架的结构是什么?