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))
};
我有以下代码:下面是点的结构
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))
};