0

构造 fieldbuilder 的代码行分配了一个可以存储为字符串、int、XYZ 等的类型。

开发人员文档不包括“BuiltInCategory”类型。我需要将其写入List<BuiltInCategory>“projectinfo 对象”进行存储。我是否需要将其转换List<BuiltinCategory>为字符串List<string>进行存储,然后再转换回来进行检索?那会奏效吗?

public void StoreDataInProjectInfo(Document doc, Element projectInfoElement)
    {
        Schema schema = Schema.Lookup(SchemaGuid);

        IList<BuiltInCategory> BuiltincatStringList = new List<BuiltInCategory>();

        BuiltincatStringList.Add("1");
        BuiltincatStringList.Add("2");


        using (Transaction transEstorage = new Transaction(doc))
        {
            transEstorage.Start("add estorage list");


        if (null == schema)
        {
            SchemaBuilder sb = new SchemaBuilder(new Guid("AF5E4C3E-C2E2-493B-8236-BA0F5E323887"));

            //public accesibility
            sb.SetReadAccessLevel(AccessLevel.Public);
            sb.SetWriteAccessLevel(AccessLevel.Public);

这是需要类型的字段构建器列表,代码在执行时失败并报告不正确的“类型”。

            //Storage Filled for Cat List
            ***FieldBuilder fb = sb.AddArrayField("UserCategoryList", typeof(BuiltInCategory))***; 




            fb.SetDocumentation("A Set Of Categories to be worksetted");

            //set schema name and register
            sb.SetSchemaName("UserCategoryList");
            schema = sb.Finish();
        }


        // Create an entity (object) for this schema (class) 
        Entity entity = new Entity(schema);

        // Get the field from the schema 
        Field userWSCategoryList = schema.GetField("UserCategoryList");

        entity.Set<IList<BuiltInCategory>>(userWSCategoryList, BuiltincatStringList);


        //Entity storage on Element
        projectInfoElement.SetEntity(entity);



        // Read back the data from the wall 
        Entity retrievedEntity = projectInfoElement.GetEntity(schema);

        IList<BuiltInCategory> retrievedData = retrievedEntity.Get<List<BuiltInCategory>>(schema.GetField("UserCategoryList"));


        transEstorage.Commit();
            }

    }
4

2 回答 2

0

我建议将 BuiltInCategory 转换为 int。这会将 BuiltInCategory 转换为其基础元素 ID 值。

这应该非常简单 - 只需将上面代码中的所有 BuiltInCategory 实例替换为 int。

要将 BuiltInCategory 转换为 int:

BuiltInCategory builtInCategory;
int builtInCategoryId = (int)builtInCategory;

另一种方式:

BuiltInCategory builtInCategory = (BuiltInCategory)builtInCategoryId;

这将比尝试将值转换为字符串更加一致。如果您必须在代码中处理多种语言,您可能会遇到使用字符串的问题。

于 2014-05-20T17:13:10.480 回答
0

感谢cs 1088,

我基本上使用了将 List 转换为数组 List 的方法,正如您正确提出的那样,我终于意识到我需要在从 Schema 中检索数组后使用下面的这个结构将 IList 转换回 BIC。

userCheckedbuiltInCategory = retrievedData.Cast().ToList();

于 2014-05-21T12:18:19.977 回答