0

Web サービスから情報を返します。戻りオブジェクトのクラスを作成しました。しかし、結果を各リスト項目に割り当てると、次のエラー メッセージが表示されます。

Web サービスを呼び出すと、次のメッセージが返されます。

System.ArgumentOutOfRangeException: インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメータ名:
System.Collections.Generic.List`1.get_Item(Int32 index) の System.ThrowHelper.ThrowArgumentOutOfRangeException() のインデックス NewUser.ADMethods.GetUserInfo(String userName) のインデックス

助けてください!

public class UserInformation
{
    public string givenname { get; set; }
    public string surname { get; set; }            
}

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<UserInformation> GetUserInfo(string userName)
{
    // Gather User Info
    // Invoke Directory Searcher & Directory Entry
    DirectorySearcher ds = new DirectorySearcher();
    // Apply filter to search
    ds.Filter = "(&(objectCategory=user)(samaccountname=" + userName + "))";

        SearchResult sr = ds.FindOne();
        List<UserInformation> UserInfo = new List<UserInformation>();
        UserInfo[0].givenname = sr.Properties["givenname"].ToString();
        return UserInfo;
}
4

2 に答える 2

1

問題は、最初は空のリストを作成し、まだ存在しない最初の項目の値にアクセスしようとしていることです。

アイテムを作成してからリストに追加する必要があります。

List<UserInformation> UserInfo = new List<UserInformation>();
UserInformation item = new UserInformation();
item.givenname = sr.Properties["givenname"].ToString();
UserInfo.Add(item);
于 2012-09-14T04:01:15.513 に答える
1

あなたの問題はここにあると思います

List<UserInformation> UserInfo = new List<UserInformation>(); 
UserInfo[0].givenname = sr.Properties["givenname"].ToString();

エントリのない新しいリストを作成し、その直後に存在しない最初のエントリにアクセスしようとしています。

于 2012-09-14T04:02:07.077 に答える