我有两种解密线路的方法。 第一种方法
public IList<LasLine> GetLasLines(string section)
{
var lasLines = new List<LasLine>();
bool startParse = false; // Секція знайдена і почати парсити її
foreach(var line in _lines)
{
if(GetSectionName(line).Equals(section) && !startParse)
{
startParse = true;
}
else
{
if(IsCommentLine(line)) continue;
if(IsBeginSection(line)) break;
LasLine lasLine;
if(!TryParseLasLine(line, out lasLine)) continue;
lasLines.Add(lasLine);
}
}
return lasLines;
}
第二次
public IList<AsciiLogDataLine> GetAsciiLogData()
{
var asciiLogData = new List<AsciiLogDataLine>();
bool startParse = false;
foreach(var line in _lines)
{
if(GetSectionName(line).Equals(LasSectionName.ASCIISection) && !startParse)
{
startParse = true;
}
else
{
if(IsCommentLine(line)) continue;
AsciiLogDataLine asciiLogDataLine;
if(!TryParseAsciiLogDataLine(line, out asciiLogDataLine)) continue; asciiLogData.Add(asciiLogDataLine);
}
}
return asciiLogData;
}
是否可以实现这种模式?
答案 0 :(得分:0)
我认为,你可以为这个Line Classes创建通用的Contract(Interface),并使用例如Generic Method。
IEnumerable<IDataLine> GetLines<T>(Func<object> parseFunction)
{
...
var dataLine = parseFunction(line);
if (dataLine == null)
{
continue;
}
...
}
或者您可以创建IParser并将其注入方法
IEnumerable<IDataLine> GetLines<T>(IParser parser)
{
...
if (!parser.CanParse(line))
{
continue;
}
var dataLine = parser.Parse(line);
...
}
最后一个样本与战略模式更相似。