2

次のシナリオがあり、トピックに関するヘルプ ガイダンスが必要です。

単純なチャット アプリケーション用のユーザー資格情報で構成された 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を使用していると想像するので、これは完全に理にかなっています。

私がこれを間違った角度から見ているかどうか、代わりに別のアプローチを使用できるかどうか教えてください。前もって感謝します

4

2 に答える 2

1

これを試しましたか:

        List<Credentials> xmlResults = Root.Elements().Elements()
            .Select(element => new Credential() {
                   Username = element.Element("Username").Value,
                   Password = element.Element("Password").Value
            })
            .ToList();
于 2013-10-31T20:05:37.507 に答える