車のリスト(IEnumerable)を返すメソッドがあります..
(ReturntypesIEnumerable<Car>
とで正常に動作しますList<Car>
):
public IEnumerable<Car> GetCars(string xml)
{
var myResultList;
XElement doc = XElement.Parse(xml);
myResultList = doc.Descendants().Descendants("dict").Select(
x => new Employee
{
Id = x.Elements("string").ElementAt(0).Value,
Prename = x.Elements("string").ElementAt(1).Value,
Name = x.Elements("string").ElementAt(2).Value,
Initials = x.Elements("string").ElementAt(3).Value
}
);
IEnumerable<Car> enumerable = myResultList;
return enumerable;
//---
//or as a List if it's better?
List<Car> asList = enumerable.ToList();
//then: return asList
}
ここで、このメソッドをジェネリックにしたいと思います。すべての IEnumerable Type / Or List Type が可能である必要があります。
このようなもの - それがどのように機能するかわからないので、それは単なる疑似コードです。
public IEnumerable<T> GetData(string xml)
{
var myResultList;
//...myResultList.. will be filled here (unnecessary)
IEnumerable<T> enumerable = myResultList;
return enumerable;
//---
//or as a List if it's better?
List<T> asList = enumerable.ToList();
//then: return asList
}
私の質問が十分に明確であることを願っています..車の代わりに家のような他のタイプがあると想像してみてください。ただし、すべてのタイプに同じ方法を使用したかったのです。
どうすればそれを達成できますか?助けていただければ幸いです。
編集:
「myResultsList」を埋めるコードを追加しました
編集2:同じメソッドで動作する2つのXML:
<plist version="1.0">
<dict>
<key>DataType</key>
<string>Employee</string>
<key>8000</key>
<dict>
<key>MitarbeiterNo</key>
<string>8000</string>
<key>Vorname</key>
<string>Walter</string>
<key>Name</key>
<string>Walter Lohner Stans</string>
<key>Initialien</key>
<string>MAL</string>
</dict>
<key>8001</key>
<dict>
<key>MitarbeiterNo</key>
<string>8001</string>
<key>Vorname</key>
<string>Motorrad</string>
<key>Name</key>
<string> Meierskappel</string>
<key>Initialien</key>
<string>MAM</string>
</dict>
<key>8004</key>
<dict>
<key>MitarbeiterNo</key>
<string>8004</string>
<key>Vorname</key>
<string>Hanspeter</string>
<key>Name</key>
<string>Altenbürger AG Horgen</string>
<key>Initialien</key>
<string>FH</string>
</dict>
</dict>
</plist>
と
<plist version="1.0">
<dict>
<key>DataType</key>
<string>Agent</string>
<key>7000</key>
<dict>
<key>AgentNo</key>
<string>7000</string>
<key>Initialien</key>
<string>VW</string>
<key>Namen</key>
<string>Walter Gnos Vertretungen Vevey</string>
</dict>
<key>7001</key>
<dict>
<key>AgentNo</key>
<string>7001</string>
<key>Namen</key>
<string>Miller GmbH Bern</string>
</dict>
<key>7002</key>
<dict>
<key>AgentNo</key>
<string>7002</string>
<key>Initialien</key>
<string>MAL</string>
<key>Namen</key>
<string>Walter Lohner Stans</string>
</dict>
</dict>
</plist>