0

WebパーツのtreeViewでこのエラーが発生する理由がわかりません。正直なところ、論理的なエラーである可能性があります。

tree.Nodes.Add(groupNode);

なぜそう言うのでしょうか:S

        protected override void CreateChildControls()
    {
        base.CreateChildControls();

        try
        {
            int Index = 0;
            TreeView tree = new TreeView();
            TreeNode groupNode; 
            Dictionary<int, string> GroupList = new Dictionary<int, string>();
            Dictionary<int, string> UserList = new Dictionary<int, string>();
            List<string> IndividualUserList = new List<string>();

            foreach (SPUser user in SPContext.Current.Web.Users)
            {
                string groupName = FormatUserLogin(user.Name);

                if (groupName != "" && groupName != "System Account")
                    IndividualUserList.Add(groupName);
                else if (user.IsDomainGroup && !string.IsNullOrEmpty(groupName) && 
                    Directory.DoesGroupExist(groupName))
                {
                    Index++;
                    GroupList.Add(Index, groupName);
                    List<ADUser> adUsers = Directory.GetUsersFromGroup(groupName);

                    foreach (ADUser member in adUsers)
                    {
                        if (member != null && !string.IsNullOrEmpty(member.DisplayName))
                            UserList.Add(Index, member.DisplayName);
                    }
                }
            }

            IndividualUserList.Sort();

            foreach (string Item in IndividualUserList)
            {
                groupNode = new TreeNode(Item);
            }

            foreach (KeyValuePair<int, string> GroupPair in GroupList)
            {
                groupNode = new TreeNode(GroupPair.Value);
                foreach (KeyValuePair<int, string> UserPair in UserList)
                {
                    if (UserPair.Key == GroupPair.Key)
                    {
                        groupNode.ChildNodes.Add(new TreeNode(UserPair.Value));
                    }
                }
            }

            tree.Nodes.Add(groupNode);

            this.Controls.Add(tree);
        }
        catch (Exception)
        {
            //loggingit
        }
    }

乾杯

4

5 に答える 5

1

その変数を使用する前に明示的に初期化しなかったためです。

この疑わしいコードを考慮してください:

foreach (string Item in IndividualUserList)
{
    groupNode = new TreeNode(Item);
}

反復全体で同じインスタンスを初期化する必要がある理由は明らかではありませんが、ちなみに、空でないIndividualUserListことは保証されていないため、変数が初期化されていないままになる可能性があります。

この問題を解決するには、関数の先頭に次のように記述します。

TreeNode groupNode = null;

また

TreeNode groupNode = new TreeNode();

編集

または、ヴラドが提案したように、次のいずれかを選択できます。

TreeNode groupNode = default(TreeNode);

選択は、コード フロー ロジックに基づいています。

于 2012-05-10T09:45:06.863 に答える
0

2 番目または 3 番目の for ループに繰り返し処理するものがある場合にのみ値を持ちます。反復するものが何もない場合、Nodesコレクションに何を追加する必要がありますか? nullこの場合、コンパイラは、 (?)を意味することを確認したいと考えています。

于 2012-05-10T09:49:12.413 に答える
0

に初期化groupNodeするnullと役立ちます。

TreeNode groupNode = null;
于 2012-05-10T09:44:46.413 に答える
0

ループが実行されない場合、値はgroupNode割り当てられません。あなたができることは、次のようなことです: TreeNode? groupNode = null;. これにより、変数に初期値が提供され、エラー/警告が削除されます。ただし、次の変更をお勧めします。

if (groupNode != null)
{
     tree.Nodes.Add(groupNode);
     this.Controls.Add(tree);
} 
else
{
     //Do some logic because the variable is still null.
}
于 2012-05-10T09:45:31.190 に答える
0

ifまたはforブロックのみでgroupNodeをインスタンス化する場合は、次のように記述する必要があります。

TreeNode groupNode = null;

C# は、 ifまたはforブロックでその行にまったく到達しない可能性があると言っているからです!

于 2012-05-10T09:47:20.343 に答える