我有一个关于以通用方式从构造函数中获取值的问题。
namespace myTestNamespace
{
Public Class myTestClass()
{
Public myTestClass(int myInt,bool myBool, double myDouble)
{
//do / set something
}
Public myTestClass(int myInt,bool myBool)
{
//do / set something
}
}
}
Using (what you need);
Using myTestNamespace;
namespace MyIWannaLookForTheParametersName
{
Public Class MyLookUpClass()
{
Public void DoSomething()
{
List<object> myList = new List<object>();
myTestClass _ myTestClass = new myTestClass(1,true,2.5);
object mySaveObject = myTestClass;
mylist.Add(mySaveObject);
//how do I get the info from the right constructor
//(I used the one with 3 parameters_
//what was the value of myInt, myBool and myDouble
//how can I make it generic enough, so it will work with other classes with
// different constructors ass well?
}
}
}
答案 0 :(得分:1)
关于意图的问题,你没有通用的方法来做到这一点。有关已调用的方法和提供的值的信息不会自动保存。当然,您完全能够自己跟踪这些事情,但是您必须编写每个类来明确地执行此操作。
以通用方式执行此操作会遇到麻烦。如果我这样做怎么办?
public class Foo
{
public string Name { get; set; }
}
public class Bar
{
public Bar(Foo foo)
{
// ...
}
}
然后假设我以这种方式打电话:
Foo f = new Foo();
f.Name = "Jim";
Bar b = new Bar(f);
f.Name = "Bob";
现在,如果存在这样的通用系统,那么foo
构造函数的Bar
值是多少?它报告"Bob"
(这是Name
的值在Foo
的实例上),或报告"Jim"
,表示运行时或库基本上必须足够聪明才能制作对象的深层副本,以便状态不会改变。
底线是这样的:如果你需要访问传递给构造函数(或任何其他函数)的参数,你必须明确地将它们存储在某个地方。
答案 1 :(得分:0)
您无法从构造函数中获取值。您需要先将它们放在班级中的属性或字段中。您提供的示例是泛型的使用不当。最好将构造函数值放入属性并创建具有这些属性的接口。
答案 2 :(得分:0)
我用这种方法得到了我需要的东西:
private static ParameterSettings[] GetListOfParametersFromIndicator(object indicatorClass, int loopId, myEnums.ParaOrResult paraOrResult)
{
return (from prop in indicatorClass.GetType().GetProperties()
let loopID = loopId
let Indicator = indicatorClass.GetType().Name
let value = (object)prop.GetValue(indicatorClass, null)
where prop.Name.Contains("_Constr_")
select new ParameterSettings { ParaOrResult=paraOrResult, LoopID= loopId, Indicator= Indicator, ParaName= prop.Name, Value= value }).ToArray();
}
其中ParameterSettings是:
public struct ParameterSettings
{
public myEnums.ParaOrResult ParaOrResult { get; set; }
public int LoopID { get; set; }
public string Indicator { get; set; }
public string ParaName { get; set; }
public object Value { get; set; }
}
此信息对我来说没问题。谢谢你的回复。
此致
Matthijs