我想將XML加載到我的程序中。通過發送方法簡化代碼作爲變量
代碼的大部分部分具有相同的身體,但有一點區別。
這部分用於很多方法,但有一點差異。
while (reader.Read())
{
if (StateElement(State.Enter, "EnterElement", reader))// "EnterElement" is Variable
{
LoadElement(reader, type);// Method LoadElement and type are variables
}
else if (StateElement(State.Exit, "ExitElement", reader))//"ExitElement" is Variable
{
break;
}
}
如果我能夠把這部分內部方法,它會節省大量的線條,變得非常簡單和可讀。
我希望我能有這樣的方法。
private void ReadElement(XmlTextReader reader,string enterElement,string exitElement,LoadElement(reader, type))
{
while (reader.Read())
{
if (StateElement(State.Enter, enterElement, reader))
{
LoadElement(reader, baseType);
}
else if (StateElement(State.Exit, exitElement, reader))
{
break;
}
}
}
然後把它稱爲:
ReadElement(reader,"EnterElement","ExitElement",LoadElement(reader,type));
這可能嗎? (這種方式是不可能的,但有什麼辦法來發送方法爲變量?)
解決:
感謝您的答案。這是我的方法與委託。
private void ReadElement(XmlTextReader reader, string enterElement, string exitElement, object type, Delegate loadElement)
{
while (reader.Read())
{
if (StateElement(State.Enter, enterElement, reader))
{
loadElement.DynamicInvoke(type);
}
else if (StateElement(State.Exit, exitElement, reader))
{
return;
}
}
}
和方式來調用它:
ReadElement(reader, "enterElement", "exitElement", baseType, (Action<BaseType>)(type => // or (Action)(() => for no arguments.
{
LoadElement(reader, type);
}));
LoadElement可能是無效的現在。
由於我在每個方法中調用方法和變量直接傳遞給委託,所以它會更加簡單。
private void ReadElement(XmlTextReader reader, string enterElement, string exitElement, Action loadElement)
而不是DynamicInvoke我使用Invoke女巫更快。
還接聽的話會有:
ReadElement(reader, "EnterElement", "ExitElement",() =>
{
LoadElement(reader, baseType);//basetype and reader will be passed to delegate by the current method that is calling ReadElement
});
IM我想你的解決方案,以瞭解和我能夠使我的方法恢復正常'無效'。所以我將你的解決方案標記爲答案。因爲我認爲它效果更好。你可以在我的代碼中看到我所做的更改。任何方式。謝謝你們倆。 :) @richzilla –