我的问题是下面的decodingProxyExcerpt2的赋值覆盖decodeProxyExcerpt1,我不知道为什么。
任何线索?
提前致谢。
DecodedProxyExcerpt decodedProxyExcerpt1 = new DecodedProxyExcerpt(stepSize);
if (audiofactory.MoveNext(stepSize))
{
decodedProxyExcerpt1 = audiofactory.Current(stepSize);
}
// At this point decodedProxyExcerpt1.data contains the correct values.
DecodedProxyExcerpt decodedProxyExcerpt2 = new DecodedProxyExcerpt(stepSize);
if (audiofactory.MoveNext(stepSize))
{
decodedProxyExcerpt2 = audiofactory.Current(stepSize);
}
// At this point decodedProxyExcerpt2.data contains the correct values.
// However, decodedProxyExcerpt1.data is overwritten and now holds the values of decodedProxyExcerpt2.data.
public class DecodedProxyExcerpt
{
public short[] data { get; set; } // PCM data
public DecodedProxyExcerpt(int size)
{
this.data = new short[size];
}
}
来自AudioFactory:
public bool MoveNext(int stepSize)
{
if (index == -1)
{
index = 0;
return (true);
}
else
{
index = index + stepSize;
if (index >= buffer.Length - stepSize)
return (false);
else
return (true);
}
}
public DecodedProxyExcerpt Current(int stepSize)
{
Array.Copy(buffer, index, CurrentExcerpt.data, 0, stepSize);
return(CurrentExcerpt);
}}
答案 0 :(得分:4)
从它的外观来看,audiofactory.MoveNext(stepSize)
保持相同的参考。这导致audiofactory.Current(stepSize)
保持在同一地址。
出于这个原因,但是decodedProxyExcerpt1
和decodedProxyExcerpt2
指向相同的引用,因此更改为一个传播到另一个。
所以,问题在于你的AudioFactory
课程。
答案 1 :(得分:1)
类的实例存储为引用。
encodedProxyExcerpt1和decodingProxyExcerpt2都是对同一对象的引用 - audiofactory.CurrentExcerpt。
答案 2 :(得分:0)
我问了一位朋友,他给了我一些暗示我可能一直在想C ++,其中数组的赋值会创建一个副本,而不是C#,其中数组的赋值会创建一个引用。
如果这是正确的
decodingProxyExcerpt1 = audiofactory.Current(stepSize);
设置引用(不是副本),然后覆盖是完全可以理解的。