我有以下功能,工作和循環通過3個可能的水平。 有沒有辦法做到以下功能相同,但不必做多個foreach語句? 基本上反應變量列表可以包含多個GroupResponseTypes 每一種可以包含多個ElementResponseBaseTypes 可以是多種類型本身 我很感興趣,在ElementResponseType 而每ElementResponseBaseType本身找到一個值可以是GroupResponseType,它包含多種類型。C#如何避免多個foreach和if語句
所以我在看一個簡單的方式,通過整個結構進行掃描特定Element.Reference 和返回相關的值
任何幫助深表感謝
public static string GetValueFromFormField(List<ResponseBaseType> responses, string fieldref)
{
string fieldvalue = String.Empty;
foreach (GroupResponseType groups in responses)
{
foreach (ElementResponseBaseType firstelements in groups.Responses)
{
if (firstelements.GetType() == typeof(ElementResponseType))
{
if (firstelements.Element.Reference == fieldref)
{
ElementResponseType firstelement = new ElementResponseType();
firstelement = (ElementResponseType)firstelements;
fieldvalue = firstelement.Value;
}
}
else if (firstelements.GetType() == typeof(GroupResponseType))
{
GroupResponseType secondgroup = new GroupResponseType();
secondgroup = (GroupResponseType)firstelements;
foreach (ElementResponseBaseType secondelements in secondgroup.Responses)
{
if (secondelements.GetType() == typeof(ElementResponseType))
{
if (secondelements.Element.Reference == fieldref)
{
ElementResponseType secondelement = new ElementResponseType();
secondelement = (ElementResponseType)secondelements;
fieldvalue = secondelement.Value;
}
}
else if (secondelements.GetType() == typeof(GroupResponseType))
{
GroupResponseType thirdgroup = new GroupResponseType();
thirdgroup = (GroupResponseType)secondelements;
foreach (ElementResponseBaseType thirdelements in thirdgroup.Responses)
{
if (thirdelements.GetType() == typeof(ElementResponseType))
{
if (thirdelements.Element.Reference == fieldref)
{
ElementResponseType thirdelement = new ElementResponseType();
thirdelement = (ElementResponseType)thirdelements;
fieldvalue = thirdelement.Value;
}
}
}
}
}
}
}
}
return fieldvalue;
}
你有沒有嘗試使用LINQ實現更清晰的外觀過濾代碼? – 2014-08-28 14:25:29
你不應該測試每個對象的類型並採取不同的行爲,你應該使用多態。每種類型都應根據其個體差異實現一種通用方法,從而允許使用這些類型的代碼進行編寫,而無需知道特定對象的公共接口的哪些派生類型。 – Servy 2014-08-28 14:29:32
嗨,是的,我嘗試使用鏈接在第一個地方,但無法工作/使其迭代通過可能是n不同層次的GroupResponseType – paulmezza 2014-08-28 14:32:18