C# 将结果从第三个方法返回到另一个方法
我有以下问题: 在方法1中,我得到一个字符串列表并将其传递给方法 在方法2中,我基于列表生成一个2d数组,并将列表进一步传递给方法3 在方法3中,我将2d数组转换为数据表 现在我想将数据表返回到方法1,但我不知道如何做。图中显示了我的问题: 我的代码:C# 将结果从第三个方法返回到另一个方法,c#,oop,C#,Oop,我有以下问题: 在方法1中,我得到一个字符串列表并将其传递给方法 在方法2中,我基于列表生成一个2d数组,并将列表进一步传递给方法3 在方法3中,我将2d数组转换为数据表 现在我想将数据表返回到方法1,但我不知道如何做。图中显示了我的问题: 我的代码: public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Docu
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document doc = commandData.Application.ActiveUIDocument.Document;
View activeView = commandData.View;
if(activeView is ViewSchedule)
{
GetDimensions(activeView as ViewSchedule);
}
return Result.Succeeded;
}
public void GetDimensions(ViewSchedule schedule)
{
TableSectionData bodySelection = schedule.GetTableData().GetSectionData(SectionType.Body);
int numberOfRows = bodySelection.NumberOfRows;
int numberOfColumns = bodySelection.NumberOfColumns;
string[,] values = new string[numberOfRows,numberOfColumns];
FillArray(SectionType.Body, bodySelection, numberOfColumns, numberOfRows, values, schedule);
}
public void FillArray(SectionType secType, TableSectionData data,
int numberOfColumns, int numberOfRows, string[,] values, ViewSchedule schedule)
{
for (int r = data.FirstRowNumber; r < numberOfRows; r++)
{
for (int c = data.FirstColumnNumber; c < numberOfColumns; c++)
{
values[r, c] = schedule.GetCellText(secType, r, c);
}
}
}
现在,我想返回填充的数组以执行。不可能以这种方式直接传递它。有三种选择: 让方法2获取结果并传回:
int Method2()
{
var method3Result = Method3();
return method3Result;
}
void Method1()
{
var result = Method2(); //indirectly gets from Method3
}
提供共享状态:
public class Method3Result { public int Value { get; set; } }
public class X
{
private Method3Result method3Result = new Method3Result();
public void Method1()
{
Method2();
//process result from method3Result
}
public void Method2()
{
Method3();
}
public void Method3()
{
method3Result.Value = 3;
}
}
提供回调:
public void Method1()
{
int method3Result;
Method2(value => method3Result = value);
}
public void Method2(Action<int> callback)
{
Method3(callback);
}
public void Method3(Action<int> callback)
{
callback(3);
}
}
此外,将FillArray更改为类似CreateArray的内容并使其同时返回数组似乎更为清晰:
public void FillArray(SectionType secType, TableSectionData data, int numberOfColumns, int numberOfRows, string[,] values, ViewSchedule schedule)
{
string[,] values = new string[numberOfRows,numberOfColumns];
for (int r = data.FirstRowNumber; r < numberOfRows; r++)
{
for (int c = data.FirstColumnNumber; c < numberOfColumns; c++)
{
values[r, c] = schedule.GetCellText(secType, r, c);
}
}
return values;
}
所以它更容易使用。请发布一些代码?到目前为止您尝试了什么?方法3返回到方法2,然后方法2返回到方法1。或者将引用类型作为参数传递并更新。不用我解释了,先查一下你自己生成的函数2和3返回类型字符串[,],然后返回,然后从每一个返回结果。总体而言,这可能不是最好的方法,但最容易为您的代码进行解释也许您需要完全重构代码,即将函数2和3封装在类调度器中,然后获取ScheduleListreturn of Filled数组-Property@musefan你应该避免在评论中提出无效的主张,而是写一个确实证明我错了的答案。事实上,这个词让人们想要的东西在这个话题中并不有趣。你的第一个例子已经证明你可以做OP要求的事情。。。OP没有直接使用这个词,是你编造的…我没有说OP要求的是不可能的。我说直接做这件事是不可能的。我没有编造这个词——我只是告诉OP直接是不可能的,并提供间接的方法,希望这些选项能满足他们。你似乎从我的回答中读到了一些不真实的东西。如果没有人问,那为什么还要麻烦地提及它呢。。。另外,取决于你对直接的定义是什么。。。我认为这是可能的definition@musefanOP询问了返回值的方法。评估所有可能性似乎是一个很好的方法,可以写出一个涵盖所有可能性的综合答案,即使在某些情况下,它归结为不可能。你在吹毛求疵,我真的不知道你的目标是什么。要么提出一些建设性的改进——我会欣然地考虑它,或者,正如我之前提出的,用你的定义、想法和你认为更好的东西来写你自己的答案。干杯
public void FillArray(SectionType secType, TableSectionData data, int numberOfColumns, int numberOfRows, string[,] values, ViewSchedule schedule)
{
string[,] values = new string[numberOfRows,numberOfColumns];
for (int r = data.FirstRowNumber; r < numberOfRows; r++)
{
for (int c = data.FirstColumnNumber; c < numberOfColumns; c++)
{
values[r, c] = schedule.GetCellText(secType, r, c);
}
}
return values;
}