Модификаторы out и ref - C#
Формулировка задачи:
Эта функция :
вызывается из другой:
private void correctFMas0(ref List<string> FData, out double TimeADC, out double FreqADC, out int FramesADC, ref bool FHaracters)
{
if (FData[0] == "Oscilloscope Data File")
{
FHaracters = true;
for (int i = 0; i < 19; i++)
{
if (i == 2)
FramesADC = Int16.Parse(FData[0].Replace("Number of frames: ", String.Empty), CultureInfo.InvariantCulture);
if (i == 7)
FreqADC = 1000 * Double.Parse(FData[0].Replace("Input Rate In kHz: ", String.Empty), CultureInfo.InvariantCulture);
if (i == 8)
TimeADC = Double.Parse(FData[0].Replace("Input Time In Sec: ", String.Empty), CultureInfo.InvariantCulture);
FData.RemoveAt(0);
}
}
else
{
FHaracters = false;
TimeADC = 5;
FramesADC = FData.Count;
FreqADC = 10000;
}
} public void getMas(List<string> FileList)
{
bool FHaracters = true;
double TimeADC, FreqADC;
int FramesADC;
List<string> FData = new List<string>();
for (int f = 0; f < FileList.Count; f++)
{
foreach (var line in File.ReadLines(FileList[f]))
FData.Add(line);
if (f == 0)
correctFMas0(ref FData, out TimeADC, out FreqADC, out FramesADC, ref FHaracters);///////////////////// Вызов вторичной функции
if(f>0)
if (FHaracters)
for (int i = 0; i < 19; i++)
FData.RemoveAt(0);
}
}Error 1 The out parameter 'FramesADC' must be assigned to before control leaves the current method Error 2 The out parameter 'FreqADC' must be assigned to before control leaves the current method Error 3 The out parameter 'TimeADC' must be assigned to before control leaves the current method
Честно говря заманался, не понимаю в чём ошибка. ref - обязательно объявить и инициализировать в главной функции, там где вызываешь вторичную функцию. out - в главной ф-ии только объявляешь, инициализация же внутри вызываемой(вторичной) функции. Помоему я всё правильно понял?!Решение задачи: «Модификаторы out и ref»
textual
Листинг программы
public void getMas(List<string> FileList,out double[,] masStol, out double[,] masDUS)
{
for (int f = 0; f < FCount; f++)
{ masStol = new double[FramesADC, FCount];
masDUS = new double[FramesADC, FCount];
for (int i = 0; i < FramesADC; i++)
{
masStol[i, f] = (Double.Parse(FData[i].Split(" ;:\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0], CultureInfo.InvariantCulture));
masDUS[i, f] = (Double.Parse(FData[i].Split(" ;:\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1], CultureInfo.InvariantCulture));
}
}