C#, getter/setter in List<cPoint> 有错误

C#, getter/setter in List<cPoint> has error

我有以下代码:下面是点的结构

public struct cPoint
{
    public float x;
    public float y;
}

下面是数据源class(截断)

    public class DataSource
    {
        private List<cPoint> samples;               // Data buffer goes here.
        //---------------------------------------------------------Getter/Setter
        .....
        public List<cPoint> Samples { get { return samples; } set { samples = value; }}

        // =====================================================constructor
        public DataSource(int ilength, string sName, Color cLine)
        {
            samples = CreateList<cPoint>(length);         
        }
}

然后

public void CalcSinusFunction_Riscy(DataSource src, double Freq, double ampFactor)
{
    int sampleRate = src.Length;
    double amplitude = ampFactor * UInt16.MaxValue;
    double frequency = Freq;
    for (int i = 0; i < src.Length; i++)
    {
        src.Samples[i].x = i;
        src.Samples[i].y = (float)(amplitude * Math.Sin((2 * Math.PI * (float)i * frequency) / sampleRate));
    }
}

它突出了一个错误,我不确定我在这里做错了什么,有什么解决办法吗?

Severity    Code    Description Project File    Line
Error   CS0029  Cannot implicitly convert type 'System.Collections.Generic.List<UDT_Term_FFT.cPoint>' to 'UDT_Term_FFT.cPoint[]'    UDT_Term_FFT    H:[=15=]7_ZMDI_Sync[=15=]7_ZMDI_zzDevelopment[=15=]2_Software2_UDTermFFT-2C\UDTermFFT\ADT_Term_FFT5_Scope\RiscyScope.cs    195
Error   CS1612  Cannot modify the return value of 'List<cPoint>.this[int]' because it is not a variable UDT_Term_FFT    H:[=15=]7_ZMDI_Sync[=15=]7_ZMDI_zzDevelopment[=15=]2_Software2_UDTermFFT-2C\UDTermFFT\ADT_Term_FFT5_Scope\RiscyScope.cs    143
Error   CS1612  Cannot modify the return value of 'List<cPoint>.this[int]' because it is not a variable UDT_Term_FFT    H:[=15=]7_ZMDI_Sync[=15=]7_ZMDI_zzDevelopment[=15=]2_Software2_UDTermFFT-2C\UDTermFFT\ADT_Term_FFT5_Scope\RiscyScope.cs    144

将下面的方法换成你的方法,希望对你有所帮助。

 public void CalcSinusFunction_Riscy(DataSource src, double Freq, double ampFactor)
        {
            int sampleRate = src.Length;
            double amplitude = ampFactor * UInt16.MaxValue;
            double frequency = Freq;
            for (int i = 0; i < src.Length; i++)
            {
                var obj = src.Samples[i];
                obj.x = i;
                obj.y = (float)(amplitude * Math.Sin((2 * Math.PI * (float)i * frequency) / sampleRate));
                Console.WriteLine("Index {0}: x: {1}  y: {2}", i, obj.x, obj.y);
            }


        }

关于第一个错误:我们需要知道第195行吗?它似乎超出了你的样本。基本上你可以使用 "ToArray()" 扩展方法。

第二个错误发生是因为cPoint是一个结构体。 [] List 的运算符总是 returns 该结构的副本。所以修改那个副本然后立即丢失它是没有用的(因为它没有存储在任何变量中)。 您可以通过以下代码更改点数:

src.Samples[i] = new cPoint()
{
   x = i,
   y = (float)(amplitude * Math.Sin((2 * Math.PI * (float)i * frequency) / sampleRate))
};