我正在开发一个项目,在创建对象时需要定义任意数量的可能参数。
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
任何帮助将不胜感激,我仍在学习。谢谢!
我希望用户能够创建具有任意数量参数的对象。然后,我想获取每个参数,并将它们传递到我的解释器脚本中。我正在制作一个模块化命令提示符 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>
,这会在调用者代码
中执行此操作。