Списки и значения списка в C#

Я из PHP, и я не думаю, что понимаю, как правильно проходить структуры данных. В документации по SPFieldCollection.Add довольно ясно, какие аргументы он принимает, поэтому я написал класс, который делает:

namespace SPAPI.Lists.Add
{
    class AddParams
    {
        public SPFieldType type { get; set; }
        public bool required { get; set; }
    }
}

Оттуда я создал список, который делает:

public Create(SPFeatureReceiverProperties properties, Dictionary<string, List<AddParams>> columns, string name, string description, SPListTemplateType type)
{
    SPSite siteCollection = properties.Feature.Parent as SPSite;
    if (siteCollection != null)
    {
        SPWeb web = siteCollection.RootWeb;
        web.Lists.Add(name, description, type);
        web.Update();

        // Add the new list and the new content.
        SPList spList = web.Lists[name];
        foreach(KeyValuePair<string, List<AddParams>> col in columns){
            spList.Fields.Add(col.Key, col.Value[0], col.Value[1]);
        }

        // More Code ...
    }
}

Проблема в том, что это не нравится col.Value[0], col.Value[1] потому что один не SPFieldType а другой не boolean по строгому определению. Я думаю, что у меня есть правильная идея, но я ищу руководство о том, как сделать эту работу.

Поскольку C# имеет подсказку типа, я предположил, что он будет использовать AddParams класс, чтобы увидеть типы.

Идея состоит в том, чтобы передать ряд параметров и создать новый список на основе этих параметров.

Это больше вопрос о C# и итерации структуры данных, чем вопрос разработки SP.

3 ответа

Решение

+ Изменить

spList.Fields.Add(col.Key, col.Value[0], col.Value[1]);

в

spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required);

И то и другое col.Value[0] а также col.Value[1] являются из AddParams тип. Это, вероятно, скомпилирует:

spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required);

но вам скорее всего нужен другой foreach внутри вашего foreach:

foreach(AddParams item in col.Value)
{
}

Почему у вас есть список AddParams? Вы ожидаете более 1 FieldType для того же поля?

Я думаю, что вы должны реализовать это следующим образом:

public Create(SPFeatureReceiverProperties properties, Dictionary<string, AddParams> columns, string name, string description, SPListTemplateType type)
{
    SPSite siteCollection = properties.Feature.Parent as SPSite;
    if (siteCollection != null)
    {
        SPWeb web = siteCollection.RootWeb;
        web.Lists.Add(name, description, type);
        web.Update();

        // Add the new list and the new content.
        SPList spList = web.Lists[name];
        foreach(string key in columns.Keys){
            spList.Fields.Add(key, columns[key].type, columns[key].required);
        }

        // More Code ...
    }
}
Другие вопросы по тегам