gpt4 book ai didi

c# - 如何从字段中提取类型?

转载 作者:太空狗 更新时间:2023-10-29 20:33:27 25 4
gpt4 key购买 nike

在 SharePoint Server 端代码中,您可以编写如下内容:

field.fieldvalueType

有时会为您提供类型(DateTime 或其他)。令人恼火的是,有时它只会返回 Null(例如,ID 字段)。

在 CSOM 中,您没有该字段。但是,TypeAsString 提供 SharePoint 类型,例如:

  • 计算
  • 整数
  • 备注

我想做的是捕获这个 huge table from MSDN :

当我知道我正在处理“整数”字段时提取“Int32”,并从 SharePoint 的注释中提取“System.String”。

这有点管用,但它是所有黑客之母:

var myTempItem = list.AddItem(new ListItemCreationInformation());
myTempItem.Update();
context.ExecuteQuery();

context.Load(myTempItem);
context.ExecuteQuery();

创建后,可以使用:

myTempItemCreated[fieldImTryingToGetTypeOf.Title].GetType().FullName -> 给-> System.Int32

现在,正确的做法是什么?我只是希望答案不是十英尺长的 switch case 语句。

最佳答案

因为没有SPField.FieldValueType property SharePoint CSOM API 中的对应项,以下扩展方法演示了如何执行它:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.SharePoint.Client;
using Field = Microsoft.SharePoint.Client.Field;

namespace SharePoint.Client.Extensions
{
public static class FieldExtensions
{


public static Type GetFieldValueType(this Field field)
{
var table = new Dictionary<FieldType, Type>();
table[FieldType.Guid] = typeof(Guid);
table[FieldType.Attachments] = typeof(bool);
table[FieldType.Boolean] = typeof(bool);
table[FieldType.Choice] = typeof (string);
table[FieldType.CrossProjectLink] = typeof(bool);
table[FieldType.DateTime] = typeof(DateTime);
table[FieldType.Lookup] = typeof(FieldLookupValue);
table[FieldType.ModStat] = typeof(int);
table[FieldType.MultiChoice] = typeof(string[]);
table[FieldType.Number] = typeof(double);
table[FieldType.Recurrence] = typeof(bool);
table[FieldType.Text] = typeof(string);
table[FieldType.URL] = typeof(FieldUrlValue);
table[FieldType.URL] = typeof(FieldUrlValue);
table[FieldType.User] = typeof(FieldUserValue);
table[FieldType.WorkflowStatus] = typeof(int);
table[FieldType.ContentTypeId] = typeof(ContentTypeId);
table[FieldType.Note] = typeof(string);
table[FieldType.Counter] = typeof(int);
table[FieldType.Computed] = typeof(string);
table[FieldType.Integer] = typeof(int);
table[FieldType.File] = typeof(string);

if (!table.ContainsKey(field.FieldTypeKind))
throw new NotSupportedException(string.Format("Unknown field type: {0}", field.FieldTypeKind));
return table[field.FieldTypeKind];
}
}
}

用法

var list = ctx.Web.Lists.GetByTitle(listTitle);
var fields = list.Fields;
ctx.Load(fields);
ctx.ExecuteQuery();

foreach (var field in fields)
{
if (field.FieldTypeKind != FieldType.Invalid)
{
var fieldValueType = field.GetFieldValueType();
Console.WriteLine("{0} : {1}", field.InternalName, fieldValueType);
}
}

关于c# - 如何从字段中提取类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32522372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com