在不使用C#中的参数的情况下将信息传递给构造函数

oil*_*lio 1 c# generics constructor

我已经支持自己进入了一个角落.这是我所拥有的简化版本(在C#中):

class OuterClass
{
    private class BadClass
    {
        private int Data;

        public BadClass()
        {
            Data = 0;

            ...
        }
    }

    T Build<T>(Object Input)
    {
        T x = new T();
        ...
        return x;
    }

    void SomeMethod()
    {
        BadClass a = Build<BadClass>(anObject);
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我现在必须根据创建BadClass实例的OuterClass实例更改Data的初始值.通常我会使用带有参数的BadClass构造函数:

public BadClass(int Data)
{
    this.Data = Data;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是我在几个泛型类型中使用BadClass,所以我必须有一个无参数的BadClass构造函数.太糟糕了我不能做这样的事情:

Build<BadClass(5)>(anObject);
Run Code Online (Sandbox Code Playgroud)

那么,当我无法将参数传递给构造函数时,如何给出构造函数的运行时信息?
是否可以创建BadClass类型的运行时实例,为其提供所需的信息,然后在我的泛型类型中使用它?

编辑:我使用List作为示例泛型类型但是并没有完全表达我的困境的深度...
我可以在Build中创建一个测试来调用init函数,如果我正在使用BadClass,但这非常hacky .我希望找到一个稍微不那么难看的方法.

Joh*_*ers 6

创建时List<BadClass>,您不会创建任何BadClass实例.继续创建一种方式,但是当你创建一个BadClass实例添加到它时,那就是你调用参数化构造函数时:

List<BadClass> a = new List<BadClass>();
a.Add(new BadClass(1));
a.Add(new BadClass(2));
Run Code Online (Sandbox Code Playgroud)

顺便说一下,构建一个BadClass实例取决于哪个OuterClass正在创建它有点代码味道.你想要完成什么?