我还有另一个关于IL子社区的问题。
我正在通过ILArrays和类似的方式找到我的方式,但我希望得到另一个澄清。 在ILNumerics网站上报告的示例中,我们(简化了不需要的内容)
public class Computing_Module1 : ILMath
{
public static ILRetArray<double> SimpleMethod()
{ using (ILScope.Enter() )
{
ILArray<double> C = ILSpecialData.sinc(40, 50);
return C[0, full];
}
}
}
如果你运行这段代码,由于我能理解的最终C [0,full],一切都很完美。相反,我在ILMath.csvread周围有以下包装代码:
public static ILRetArray<double> ReadCsvIL(string aFileName)
{
using (ILScope.Enter())
{
string stringData;
try
{ stringData = getDataFromText(aFileName);
ILArray<double> myData = ILMath.csvread<double>(stringData);
return myData ;
}
catch (FileNotFoundException anExc)
{
Console.WriteLine(anExc.Message);
return null;
}
}
}
这是行不通的:两个解决方法:使用示例中提供的相同技巧替换
ILArray<double> myData = ILMath.csvread<double>(stringData);
return myData ;
带
ILArray<double> myData = ILMath.csvread<double>(stringData);
return myData[ILMath.full, ILMath.full] ;
或采用ILArrays的.a属性,因此应该写成:
ILArray<double> myData = ILMath.csvread<double>(stringData);
myData.a = myData;
return myData ;
问题:我们是否总是必须使用.a属性来分配ILRetArray?我是否正确理解如果返回anArray [full,full]然后在幕后执行一些深层复制,基本上分配给.a属性?还有其他方法可以做到这一点,最有效的方法是什么?
为了完整性,从文件中检索文本的函数只是一个围绕streamreader.ReadToEnd()的包装函数,这里是代码:
public static string getDataFromText(string aFileName)
{
if (!File.Exists(aFileName))
throw new FileNotFoundException("The file does not exist.");
string stringData = String.Empty;
using (StreamReader streamReader = new StreamReader(aFileName))
{
stringData = streamReader.ReadToEnd();
}
return stringData;
}
希望这是有道理的;非常感谢你。