Can't see properties from interface

I'm having some interface woes!

Here's the code:

I expected to be able to access the properties Added and ID through my test template, but intellisense says No!

Am I misusing an interface? Have I made a silly error?

Any advice appreciated - this is driving me nuts.

namespace blah.blah.blah
{
    public interface ITrackedItem
    {
        DateTime Added { get; set; }
        int ID { get; set; }
    }

    public class TestTemplate<ITrackedItem>
        where ITrackedItem : new() 
    {
        public SortedSet<ITrackedItem> Set { get; set; }

        public void Test()
        {
            Set = new SortedSet<ITrackedItem>();

            foreach (var item in Set)
            {
                // cannot access any properties here
                // var ID = item.ID; <=============|
            }
        }
    }
}
Jon Skeet
people
quotationmark

This is the problem:

public class TestTemplate<ITrackedItem>

You've declared a type parameter called ITrackedItem, which is entirely different to the ITrackedItem interface. It's not clear that your type needs to be generic at all - can you not just use

public class TestTemplate

? If you want it to be generic in a type which must implement ITrackedItem, you should use something like:

public class TestTemplate<T>
    where T : ITrackedItem, new() 
{
    public SortedSet<T> Set { get; set; }

    public void Test()
    {
        Set = new SortedSet<T>();

        foreach (var item in Set)
        {
            // now you can access any properties here
            // 
        }
    }
}

people

See more on this question at Stackoverflow