Kamran
Kamran

Reputation: 4100

Sitecore: The call is ambiguous between the following methods or properties: 'Sitecore.Data.ID.operator !=(Sitecore.Data.ID, Sitecore.Data.ID)'

For the following code: I am getting an error mentioned in subject.

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 (data != null) // I am getting error here 
        subsidiariesIdList.Add(data);
}

Here is the complete error text:

The call is ambiguous between the following methods or properties: 'Sitecore.Data.ID.operator !=(Sitecore.Data.ID, Sitecore.Data.ID)' and 'Sitecore.Data.ID.operator !=(Sitecore.Data.ID, Sitecore.Data.ShortID)'

Upvotes: 4

Views: 616

Answers (3)

dru_ward
dru_ward

Reputation: 71

Does the code you supplied even compile if you were to comment out the code inside the foreach, the Sitecore MultilistField stores it ids in a pipe separated string so your foreach would have to call GetItems() or at least split the raw value on a '|' to get a collection to iterate over?

However another way/use of the Sitecore ID TryParse method:

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);
}

Or you could do:

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

if (multilistField != null && multilistField.Count > 0)
{
var subsidiariesIdList = multilistField.GetItems().Select(i=>i.ID).ToList<ID>();
}

Enjoy.

P.s. Apologies for the poor formatting, I'm on an iPhone.

Upvotes: -1

Richard Seal
Richard Seal

Reputation: 4266

You can also use the IsNullOrEmpty extension method on the ID type:

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);
}

Upvotes: 1

Marek Musielak
Marek Musielak

Reputation: 27142

Just cast null to ID:

if (data != (ID)null)

The reason why you need to cast is that ID class has 2 operators defined:

public static bool operator ==(ID id1, ID id2)
public static bool operator ==(ID id1, ShortID id2)

The have different implementation and null can be both ID or ShortID. You need to tell compiler which one to use.

Upvotes: 5

Related Questions