次のシナリオがあり、トピックに関するヘルプ ガイダンスが必要です。
単純なチャット アプリケーション用のユーザー資格情報で構成された XML ファイルがあります (商用目的ではないため、このシナリオではセキュリティは重要ではありません)。ユーザーがサービスを購読する場合、資格情報は XML ファイルに記録されているものと一致する必要があります。
XML ファイルのコード スニペット:
<Users>
<User>
<Username>Johan</Username>
<Password>Johan123</Password>
</User>
<User>
<Username>Carel</Username>
<Password>Carel123</Password>
</User>
...
...
</Users>
次に、次のクラスがあります。
public class Credentials
{
public string Username { get; set; }
public string Password { get; set; }
}
Credentials クラスは、XML ファイルに記録されたユーザーのリストを取得するためだけでなく、特定のユーザーを取得するためにも使用されます。
XML ファイルから要素を取得できる次のコードがあります。
public List<Credentials> RetrieveUsers()
{
Root = XElement.Load(path + "Users.xml");
List<Credentials> credentials = new List<Credentials>();
var xmlResults = from element in Root.Elements().Elements()
select new
{
Username = element.Element("Username").Value,
Password = element.Element("Password").Value
};
foreach(var xmlResult in xmlResults)
{
Credentials temp = new Credentials();
temp.Username = xmlResult.Username;
temp.Password = xmlResult.Password;
credentials.Add(temp);
}
return credentials;
}
ただし、これは冗長に感じます。次の行で何かを達成したい(これは機能しません):
public List<Credentials> RetrieveUsers()
{
Root = XElement.Load(path + "Users.xml");
List<Credentials> credentials = new List<Credentials>();
List<Credentials> xmlResults = from element in Root.Elements().Elements()
select new
{
Username = element.Element("Username").Value,
Password = element.Element("Password").Value
};
return xmlResults;
}
次のエラーが表示されます。
「タイプ 'System.Collections.Generic.IEnumerable' を 'System.Collections.Generic.List' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)」
select LINQステートメントによって作成されたコレクションを列挙するためにIEnumerableを使用していると想像するので、これは完全に理にかなっています。
私がこれを間違った角度から見ているかどうか、代わりに別のアプローチを使用できるかどうか教えてください。前もって感謝します