Sitecore:以下方法或属性之间的调用不明确:';Sitecore.Data.ID.operator=(Sitecore.Data.ID、Sitecore.Data.ID)和#x27;

Sitecore:以下方法或属性之间的调用不明确:';Sitecore.Data.ID.operator=(Sitecore.Data.ID、Sitecore.Data.ID)和#x27;,sitecore,sitecore7.2,Sitecore,Sitecore7.2,对于以下代码:我得到了主题中提到的一个错误 var subsidiariesIdList=new List(); MultilistField MultilistField=newItem.Fields[“收件人子公司”]; foreach(multilistField中的变量项) { var data=Sitecore.data.ID.Parse(item.ToString()); if(data!=null)//这里出现错误 subdiariesidlist.Add(数据); } 以下是完

对于以下代码:我得到了主题中提到的一个错误

var subsidiariesIdList=new List();
MultilistField MultilistField=newItem.Fields[“收件人子公司”];
foreach(multilistField中的变量项)
{
var data=Sitecore.data.ID.Parse(item.ToString());
if(data!=null)//这里出现错误
subdiariesidlist.Add(数据);
}
以下是完整的错误文本:

以下方法或属性之间的调用不明确:“Sitecore.Data.ID.operator!”=(Sitecore.Data.ID,Sitecore.Data.ID)和“Sitecore.Data.ID.operator!”=(Sitecore.Data.ID,Sitecore.Data.ShortID)'


只需将null强制转换为
ID

if(数据!=(ID)null)
需要强制转换的原因是
ID
class定义了两个运算符:

publicstaticbool操作符==(ID-id1,ID-id2)
公共静态布尔运算符==(ID id1,ShortID id2)

具有不同的实现,null可以是
ID
ShortID
。您需要告诉编译器要使用哪种方法。

您还可以在
ID
类型上使用
IsNullOrEmpty
扩展方法:

var subsidiariesIdList = new List<ID>();

MultilistField multilistField = newsItem.Fields["Recipient Subsidiaries"];
foreach (var item in multilistField)
{
    var data = Sitecore.Data.ID.Parse(item.ToString());

    if (!ID.IsNullOrEmpty(data))
        subsidiariesIdList.Add(data);
}
var subsidiariesIdList=new List();
MultilistField MultilistField=newItem.Fields[“收件人子公司”];
foreach(multilistField中的变量项)
{
var data=Sitecore.data.ID.Parse(item.ToString());
如果(!ID.IsNullOrEmpty(数据))
subdiariesidlist.Add(数据);
}

如果要注释掉foreach中的代码,Sitecore MultilistField会将其ID存储在管道分隔的字符串中,这样foreach就必须调用GetItems()或至少拆分“|”上的原始值才能获得要迭代的集合,您提供的代码是否会编译

但是,Sitecore ID TryParse方法的另一种方法/用法:

var subsidiariesIdList = new List<ID>();

    MultilistField multilistField = newsItem.Fields["Recipient Subsidiaries"];
    foreach (var item in multilistField)
{
ID id;
if (Sitecore.Data.ID.Parse(item.ToString(), out id))
{
    subsidiariesIdList.Add(id);
}
var subsidiariesIdList=new List();
MultilistField MultilistField=newItem.Fields[“收件人子公司”];
foreach(multilistField中的变量项)
{
身份证;
if(Sitecore.Data.ID.Parse(item.ToString(),out ID))
{
subdiariesidlist.Add(id);
}
或者你可以:

MultilistField multilistField = newsItem.Fields["Recipient Subsidiaries"];

if (multilistField != null && multilistField.Count > 0)
{
var subsidiariesIdList = multilistField.GetItems().Select(i=>i.ID).ToList<ID>();
}
MultilistField MultilistField=newsItem.Fields[“收件人子公司”];
if(multilistField!=null&&multilistField.Count>0)
{
var subfidiariesidlist=multilistField.GetItems().Select(i=>i.ID.ToList();
}
享受


另外,我为糟糕的格式表示歉意,我正在使用iPhone。

谢谢,如果我知道一点为什么要将
(ID)
null放在一起,那就太好了。我已经为我的答案添加了解释。或者你可以使用Sitecore.Data.ID.IsNullOrEmpty(Data)进行null检查,这并不依赖于你知道“数据”是什么类型