了解对象初始化程序如何在涉及泛型的地方工作

时间:2017-04-04 11:08:34

标签: c# generics syntax-error

我创建了一个对象,我希望通过对象初始化(或者你可能称之为的任何东西)来实例化它。如果您不太确定我在说什么,请查看此MSDN链接here。无论如何,我所拥有的对象将如下所示(我只是在这里发布界面以简化事情):

public interface IEntryPoint<T>
{
    string Name { get; set; }
    IList<ITestItem<T>> Tests { get; set; }
}

然后,这是ITestItem<T>对象的界面:

public interface ITestItem<T>
{
    string Name { get; set; }
    T Test { get; set; }
}

然后,IEntryPoint<T>对象的实际实现有一个如下所示的构造函数:

public EntryPoint(string name, IList<ITestItem<T>> tests)
{
    this.name = name;
    this.tests = tests;
}

ITestItem<T>构造函数的实现如下:

public TestItem(string name, T test)
{
    this.name = name;
    this.test = test;
}

好吧,既然你已经了解了我的物品的样子,我将尝试解释我的问题。同样,我想要做的是通过对象初始化来实例化我的EntryPoint对象(请参阅上面的链接以了解我的意思)。我尝试这样做时遇到语法错误,我无法理解原因。所以说到这里,当我尝试实例化一个新的EntryPoint时,这就是它的样子:

ITestItem<int> testItem = new TestItem<int>("My Test", 0);
IEntryPoint<int> entryPoint = new EntryPoint<int>
{
    Name = "My Entry Point",
    Tests = new List<ITestItem<int>>() { testItem }
};

1 个答案:

答案 0 :(得分:0)

由于您有一个带有两个参数的构造函数,现在默认构造函数即无参数将无法使用,除非您明确指定类型,因此如果无参数构造函数不存在,则无法使用对象初始化程序,添加EntryPoint的无参数构造函数:

public EntryPoint()
{

}

如需参考,请查看How to: Initialize Objects by Using an Object Initializer (C# Programming Guide)