public void Freeze()
{
if (!_isFrozen)
{
var allMemberMaps = _classMap.AllMemberMaps;
var elementNames = new List<string>();
var defaultValues = new Dictionary<string, object>();
if (_arguments != null)
{
foreach (var argument in _arguments)
{
// compare MetadataTokens because ReflectedTypes could be different (see p. 774-5 of C# 5.0 In a Nutshell)
var memberMap = allMemberMaps.FirstOrDefault(m => m.MemberInfo.MetadataToken == argument.MetadataToken);
if (memberMap == null)
{
var message = string.Format("Member '{0}' is not mapped.", argument.Name);
throw new BsonSerializationException(message);
}
elementNames.Add(memberMap.ElementName);
if (memberMap.IsDefaultValueSpecified)
{
defaultValues.Add(memberMap.ElementName, memberMap.DefaultValue);
}
}
}
_elementNames = elementNames;
_defaultValues = defaultValues;
_isFrozen = true;
}
}