Tridion 在C#TBB中:如何将多行文本字段拆分为单独的字符串

Tridion 在C#TBB中:如何将多行文本字段拆分为单独的字符串,tridion,tridion2009,Tridion,Tridion2009,我在Tridion中有一个可以有多个值的纯文本字段。itemtype是一个SingleLineTextField 在TBB代码中,我有以下内容(删除了非必要部分): ItemFields ItemFields=newitemfields(folder.Metadata,folder.MetadataSchema); foreach(itemFields中的ItemField ItemField) { string itemFieldValue=string.Empty; 开关(Utilities

我在Tridion中有一个可以有多个值的纯文本字段。itemtype是一个SingleLineTextField

在TBB代码中,我有以下内容(删除了非必要部分):

ItemFields ItemFields=newitemfields(folder.Metadata,folder.MetadataSchema);
foreach(itemFields中的ItemField ItemField)
{
string itemFieldValue=string.Empty;
开关(Utilities.GetFieldType(itemField))
{
案例字段类型。SingleLineTextField:
itemFieldValue=itemField.ToString();
打破
}
}
现在,如果有两个条目,结果就是两个字符串中有一个字符换行符

String A
String B

所使用的方法是通用的,也适用于其他字段,因此我正在寻找某种方法来确定SingleLineTextField中是否包含更多值。

您可以将该字段强制转换为
SingleLineTextField
类型,然后遍历values集合,如下所示:

SingleLineTextField=(SingleLineTextField)itemField;
foreach(field.Values中的字符串值)
{
//做有价值的事
}
//或者,如果您只需要值的计数
int i=field.Values.Count;

首先,我建议不要在对象上依赖
ToString()
方法,除非有明确的文档记录。在本例中,它与抽象类
ItemField
一起工作,但情况并非总是如此

TOM.Net API只定义了
ItemField
的定义和名称属性,因此您需要将ItemField对象强制转换为更具体的对象

TextField
抽象类继承自
SingleLineTextField
,它定义了
ToString()
方法,还定义了
Value
Values
属性,这些属性更适合您尝试执行的操作。查看文档,我们可以看到
Values
将为我们提供一个
IList
值,即使您的字段不是多值字段。太好了

因此,为了回答您的问题,“我正在寻找某种方法来确定SingleLineTextField中是否有更多的值”,您需要将ItemField转换为TextField,并检查它提供的值的数量,因此:

TextField TextField=(TextField)itemField;
//如果需要单独处理多值字段
如果(textField.Values.Count>1)
{
//处理多个值的逻辑如下所示
}
其他的
{
//处理单值问题的逻辑在这里
}
//好多了。。。如果可以以通用方式处理任意数量的值
foreach(textField.Values中的字符串值)
{
//通用代码在这里
}

这很有效!我的错误在于没有将Itemfield专门转换为SingleLineTextField。只有到那时,你才能得到“熟悉”字段。值选项…努诺在我输入我的答案时写下了他的答案。它们基本上是一样的。我希望我的文章提供了一些额外的内容:)谢谢@David,这是一些很好的额外信息,对任何可能有类似问题的人都很有用。这就是SE的全部意义!