Code Snippet: Delegate-based APIs



// Example: Action-based API (class library)


public void ChangeItem(PropValue[] propsToSet, params Action<MapiMessage>[] actions)
{
   
using (MapiMessage mapiMessage = collector.ImportMessageChange( /* Contents Elided */
))
   {
      
foreach (Action<MapiMessage> action in
actions)
      {
         action(mapiMessage);
      }
      mapiMessage.SaveChanges();
   }
}


// Example: Action-based API (client)


Action<MapiMessage> copyProps = new Action<MapiMessage>(delegate(MapiMessage mapiMessage)
{
   
using (MapiMessage sourceMessage = store.OpenEntry(messageProp[PropTag.EntryId].GetBytes()) as MapiMessage
)
   {
      
List<PropTag> propTagsToInclude = excludePropTags(new List<PropTag
>(PropTagGroup.GetApptProps(store)), propsToExclude);
      
PropProblem
[] problems = sourceMessage.CopyProps(mapiMessage, propTagsToInclude.ToArray());
   }
});


Action<MapiMessage> modifyRecipients = new Action<MapiMessage>(delegate(MapiMessage message)
{
   message.ModifyRecipients(
ModifyRecipientsFlags
.AddRecipients,
      
new AdrEntry
(
      
new PropValue(PropTag.DisplayName, "userInfo.DisplayName"
),
      
new PropValue(PropTag.RecipientType, (int)RecipientType
.To),
      
new PropValue(PropTag.AddrType, "EX"
),
      
new PropValue(PropTag.EmailAddress, "userInfo.LegacyDn"
)));
   });


outboxProp.SendItem(propsToSet.ToArray(), copyProps, modifyRecipients);


// Example: Predicate


Predicate<PropValue> hasNoError = new Predicate<PropValue>(delegate(PropValue propValue)
{
   
if (propValue.IsNull() || propValue.IsError()) return false
;
   
return true
;
});


PropValue[] sourceProps = null;
PropValue[] destProps = Array.FindAll(sourceProps, hasNoError);


// Example: Converter


Converter<PropValue, PropTag> getPropTag = new Converter<PropValue,PropTag>(delegate(PropValue propValue)
{
   return
propValue.PropTag;
});


PropValue[] propValues = null;
PropTag[] propTags = Array.ConvertAll(propValues, getPropTag);


// Example: Comparision


Comparison<PropValue> compareProp = new Comparison<PropValue>(delegate(PropValue lhs, PropValue rhs)
{
   
int propTag = Comparer<int>.Default.Compare((int)lhs.PropTag, (int
)rhs.PropTag);
   
if (propTag != 0) return
propTag;
   
if (object.Equals(lhs.Value, rhs.Value)) return
0;
   
return
-1;
});


Array.Sort<PropValue>(propValues, compareProp);

Skip to main content