Ссылка .NET (метод не найден) - PullRequest
1 голос
/ 19 декабря 2011

Я получаю сообщение об ошибке в этой строке

return folder.SubFolders.Aggregate(count, (current, subfolder) =>
               GetFilesCount(subfolder, current));

Ошибка

Ошибка 1 «Microsoft.SharePoint.SPFolderCollection» не содержит определения «Агрегат» иметод расширения «Агрегат», принимающий первый аргумент типа «Microsoft.SharePoint.SPFolderCollection», не найден (отсутствует директива using или ссылка на сборку?)

Остальная часть кода

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using Microsoft.SharePoint;
using System.Windows.Controls;
using System.IO;
using System.Collections;

 namespace WindowsFormsApplication1
 {
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                using (SPSite currentSite = new SPSite(txtSiteAddress.Text))
                {
                    SPWeb currentweb = currentSite.OpenWeb();
                    var webtree = new TreeViewItem();
                    webtree.Header = currentweb.Title;
                    webtree.Tag = currentweb;
                    MapFolders(currentweb.Folders, webtree);    
                }
             }
             catch (Exception a)
             {
                MessageBox.Show(a.ToString());
             }
        }

        private void MapFolders(SPFolderCollection folderList,
                                             TreeViewItem treeNode)
        {
            for (var i = 0; i < folderList.Count; i++)
            {
                var item = new TreeViewItem();
                item.Header = string.Format("{0} ({1})", folderList[i].Name,
                                             GetFilesCount(folderList[i], 0));
                item.Tag = folderList[i];

                treeNode.Items.Add(item);

                if (folderList[i].SubFolders.Count > 0)
                    MapFolders(folderList[i].SubFolders, item);
            }
        }

        private int GetFilesCount(SPFolder folder, int count)
        {
            count += folder.Files.Count;

            return folder.SubFolders.Aggregate(count, (current, subfolder) =>
                   GetFilesCount(subfolder, current));
        }



    }
}

Я пытаюсь создать приложение для формы Windows, как показано в ссылке ниже,

введите описание ссылки здесь

Я внес изменения в строкуиспользовать приведение, но оно говорит

return folder.SubFolders.Cast(count, (current, subfolder) =>
               GetFilesCount(subfolder, current));

и новая ошибка -

Ошибка 1 Нет перегрузки для метода «Принятие» принимает «2» аргумента

1 Ответ

5 голосов
/ 19 декабря 2011

LINQ работает только с общими коллекциями.
SPFolderCollection реализует IEnumerable, но не IEnumerable<SPFolder>.

Вам нужно позвонить .Cast<SPFolder>().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...