Write a class with some properties and indexed Is there a better way to write it? I need the best way to write it. It is this principle? Please show me a better way

it breaks SRP?

 public class PlacementLocation
{
    public int Row { get; set; }
    public int Column { get; set; }
    public int Location { get; set; }
}

public class PlacementLocations : PlacementLocation
{
    private void SetLocationInList()
    {
        _placementLocations = new List&lt;PlacementLocation&gt;
            {
                new PlacementLocation {Column = 1, Row = 9, Location = 1},
                new PlacementLocation {Column = 2, Row = 9, Location = 2},
                new PlacementLocation {Column = 3, Row = 9, Location = 3},
                new PlacementLocation {Column = 4, Row = 9, Location = 4},
                new PlacementLocation {Column = 5, Row = 9, Location = 5},
            };
    }

    private List&lt;PlacementLocation&gt; _placementLocations;

    public PlacementLocations()
    {
        _placementLocations = new List&lt;PlacementLocation&gt;();
        SetLocationInList();
    }

    public Tuple&lt;int, int&gt; this[int location]
    {
        get { return new Tuple&lt;int, int&gt;(_placementLocations[location].Row, _placementLocations[location].Column); }
    }

    public int this[int row, int column]
    {
        get
        {
            PlacementLocation singleOrDefault =
                _placementLocations.SingleOrDefault(d =&gt; d.Column == column &amp;&amp; d.Row == row);
            return singleOrDefault != null ? singleOrDefault.Location : 0;
        }
    }
}


Update :

  public class PlacementLocations
{

    #region Variables

    private readonly List&lt;PlacementLocation&gt; _placementLocations;

    #endregion

    #region Constructor

    public PlacementLocations(List&lt;PlacementLocation&gt; placementLocations)
    {
        _placementLocations = placementLocations;
    }

    #endregion

    #region Public Methods

    public Tuple&lt;int, int&gt; FindRowColumn(int location)
    {
        return GetRowColumn(location);
    }

    public int FindLocation(int row, int column)
    {
        return GetLocation(row, column);
    }

    #endregion

    #region Indexes

    public Tuple&lt;int, int&gt; this[int location]
    {
        get { return GetRowColumn(location); }
    }

    public int this[int row, int column]
    {
        get { return GetLocation(row, column); }
    }

    #endregion

    #region Private Methods

    private Tuple&lt;int, int&gt; GetRowColumn(int location)
    {
        return new Tuple&lt;int, int&gt;(_placementLocations[location].Row, _placementLocations[location].Column);
    }

    private int GetLocation(int row, int column)
    {
        PlacementLocation singleOrDefault =
            _placementLocations.SingleOrDefault(d =&gt; d.Column == column &amp;&amp; d.Row == row);
        return singleOrDefault != null ? singleOrDefault.Location : 0;
    }

    #endregion

}

public class LocationsFactory
{
    public static PlacementLocations GetPredefinedLocations()
    {
        var placementLocationList = new List&lt;PlacementLocation&gt;
            {
                new PlacementLocation {Column = 1, Row = 9, Location = 1},
                new PlacementLocation {Column = 2, Row = 9, Location = 2},
                new PlacementLocation {Column = 3, Row = 9, Location = 3},
                new PlacementLocation {Column = 4, Row = 9, Location = 4},
                new PlacementLocation {Column = 5, Row = 9, Location = 5},
            };

        return new PlacementLocations(placementLocationList);
    }
}
The inheritance doesn't make sense. 'PlacementLocations' is the object representing a collection of 'PlacementLocation' objects.

public class PlacementLocations
{
    private List&lt;PlacementLocation&gt; _placementLocations;

    public PlacementLocations(List&lt;PlacementLocation&gt; locations)
    {
        _placementLocations = locations;
    }

    public Tuple&lt;int, int&gt; this[int location]
    {
        get { return new Tuple&lt;int, int&gt;(_placementLocations[location].Row, _placementLocations[location].Column); }
    }

    public int this[int row, int column]
    {
        get
        {
            PlacementLocation singleOrDefault =
                _placementLocations.SingleOrDefault(d =&gt; d.Column == column &amp;&amp; d.Row == row);
            return singleOrDefault != null ? singleOrDefault.Location : 0;
        }
    }
}


Class should not contain particular initialization values: use constructor parameters instead and initialize externally:

...

var placementLocationList = new List&lt;PlacementLocation&gt;
{
    new PlacementLocation { Column = 1, Row = 9, Location = 1 },
    new PlacementLocation { Column = 2, Row = 9, Location = 2 },
    new PlacementLocation { Column = 3, Row = 9, Location = 3 },
    new PlacementLocation { Column = 4, Row = 9, Location = 4 },
    new PlacementLocation { Column = 5, Row = 9, Location = 5 },
};

var placementLocations = new PlacementLocations(placementLocationList);

...


Update:
if you need predefined locations list you can use some sort of factory...

public class LocationsFactory
{
    public static PlacementLocations GetPredefinedLocations()
    {
        var placementLocationList = new List&lt;PlacementLocation&gt;
        {
            new PlacementLocation { Column = 1, Row = 9, Location = 1 },
            new PlacementLocation { Column = 2, Row = 9, Location = 2 },
            new PlacementLocation { Column = 3, Row = 9, Location = 3 },
            new PlacementLocation { Column = 4, Row = 9, Location = 4 },
            new PlacementLocation { Column = 5, Row = 9, Location = 5 },
        };

        return new PlacementLocations(placementLocationList);
    }
}