有没有办法在c#中制作一个不限制泛型类型参数数量的类?

问题描述 投票:0回答:1

我正在开发一个项目,在创建对象时需要定义任意数量的可能参数。

public class base
{
    //Variable Declarations here...
    
    public base(){ //Handle Arguments here... }
}

public class new1 : base
{
    //Action Logic here...
}

我的主要问题来自“new1”的声明(抱歉命名约定不好。)如果用户想要创建一个不传递其他参数的对象,那么该声明可以完美地工作。但是,如果用户想要创建一个传递参数的对象,我需要使用新的声明来处理它。

public class new1<T1> : base
{
    //New Action Logic here (handles T1)...
}

我理解对此的一种解决方案是简单地限制用户创建具有“n”个参数的对象的能力,并使用每个

<T1> * n
参数编写 new 的新定义,例如:

public class new1<T1> : base { }
public class new1<T1,T2> : base { }
public class new1<T1,T2,T3> : base { } etc...

但是,用户可能输入的内容可能会超过 10-11 个条目,这不仅会很难管理 10-11 个不同的声明,而且还会带来混乱的解决方案。

我尝试创建一个带有空参数列表的类。我希望能够创建一个对象,在其中可以传递我需要的任意数量的参数。

public class new1<new T[]> { };
private static new1<string, string, int> test; //parameters are just an example

任何帮助将不胜感激,我仍在学习。谢谢!

c# class object
1个回答
0
投票

我希望用户能够创建具有任意数量参数的对象。然后,我想获取每个参数,并将它们传递到我的解释器脚本中。我正在制作一个模块化命令提示符 esc 程序,我希望用户能够创建自己的命令,这些命令可以被我的解释器访问和理解。

我建议思考而不是使用可能代表“多个”值的“单个”参数;脑海中浮现的选项: // dictionary var val = new Dictionary<string, object> { { "Id", 42 }, { "Name", "abc" }, }; SomeMethod(val); // anonymous type, using reflection magic in your library var val = new { Id = 42, Name = "abc" }; SomeMethod(val); // named value-tuple; note names aren't available via reflection, // but are via "analyzers" var val = (id: 42, name: "abc"); SomeMethod(val); // unnamed value-tuple var val = (42, "abc"); SomeMethod(val); // POCO type, using reflection magic in your library var val = new SomeType { Id = 42, Name = "abc" }; SomeMethod(val); 而这些正是

你的图书馆
进行撕裂的地方;另一种方法是拥有一些 
pair

类型 - 例如 IParameterHandler<T>,即对于 arg 类型 Foo,您可能会请求

调用者提供的 
IParameterHandler<Foo>
,这会在 
调用者代码
中执行此操作。
© www.soinside.com 2019 - 2024. All rights reserved.