无法从界面中看到属性

dot*_*oob 0 c# interface

我有一些界面问题!

这是代码:

我希望能够通过我的测试模板访问属性Added和ID,但intellisense说不!

我滥用界面了吗?我犯了一个愚蠢的错误吗?

任何建议表示赞赏 - 这让我感到疯狂.

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; <=============|
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

这就是问题:

public class TestTemplate<ITrackedItem>
Run Code Online (Sandbox Code Playgroud)

您已声明一个名为的参数ITrackedItem,它与ITrackedItem接口完全不同.目前尚不清楚你的类型是否需要通用 - 你能不能只使用它

public class TestTemplate
Run Code Online (Sandbox Code Playgroud)

?如果你希望它在必须实现的类型中是通用的ITrackedItem,你应该使用类似的东西:

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
            // 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)