Списки и значения списка в 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 ...
}
}