in EnvDTE.Client/Impl/ProjectModelImpl/PropertyImpl/ProjectPropertiesImplementation.cs [12:45]
public class ProjectPropertiesImplementation(
[NotNull] DteImplementation dte,
[NotNull] object parent,
[NotNull] ProjectItemModel projectModel)
: PropertiesImplementation(dte, parent)
{
public override Property Item(object index)
{
// In VS behavior of this method for Project properties differs from other implementations of the same method.
// If an integer index is out of range, an exception is thrown, but if a string index is invalid, a null property is returned
var map = VisualStudioProperties.ProjectPropertiesMap;
if (index is int intIndex)
{
var i = ImplementationUtil.GetValidIndexOrThrow(intIndex, map.Count);
var propertyInfoAtIndex = map.ElementAt(i).Value;
return new ProjectPropertyImplementation(DteImplementation, this, projectModel, propertyInfoAtIndex);
}
if (index is string stringIndex)
{
return map.TryGetValue(stringIndex, out var propertyInfoByName)
? new ProjectPropertyImplementation(DteImplementation, this, projectModel, propertyInfoByName)
: new NullPropertyImplementation(DteImplementation, this, stringIndex);
}
throw new ArgumentException(nameof(index));
}
public override int Count => VisualStudioProperties.ProjectPropertiesMap.Count;
public override IEnumerator GetEnumerator() => VisualStudioProperties.ProjectPropertiesMap.Values.Select(info =>
new ProjectPropertyImplementation(DteImplementation, this, projectModel, info)).GetEnumerator();
}