C# 向列表中动态添加值<;双倍>;使用get&;设置
有可能做一些像这样的事情吗C# 向列表中动态添加值<;双倍>;使用get&;设置,c#,list,properties,C#,List,Properties,有可能做一些像这样的事情吗 public class TestClass { public List<double> preTvoltage { get { return preTvoltage; } set { preTvoltage.Add(this); /
public class TestClass
{
public List<double> preTvoltage
{
get
{
return preTvoltage;
}
set
{
preTvoltage.Add(this); //how to add to the List??
}
}
}
公共类TestClass
{
公共电压表
{
收到
{
返回电压;
}
设置
{
添加(这个);//如何添加到列表??
}
}
}
我之所以要这样做(我不知道这是否是最好的方法,就我所知),是因为我必须从xml文件中获取数据,而这些文件中的数据数量并不总是相同的
稍后我想填充一个ListView行,使用列表我可以计算有多少项以及需要多少列
以下是xml文件的示意图:
xml文件中还有触发器和后触发器节点,具有相同的数据排序。
下面是我想要实现的列表视图:
所以,有一些pin组,每个pin组都有大量的数据,上面我给出的代码只是在xml文件中保存一个电压节点
我在倾听你的想法
谢谢。没有,而且它不允许使用属性-您应该将其实现为
添加
(或类似的恰当命名)方法
您不能添加
此
,因为此
是测试类
,而不是双重
;你不能添加值
,因为这是一个列表
,而添加
需要一个双倍的
不清楚你会如何使用它,但在我看来这是一个非常糟糕的主意。将集合设置为属性已经有点不寻常了,但更奇怪的是,设置操作会改变列表。另外,在setter中没有使用值
变量也很奇怪。。。为什么不呢
你应该考虑调用代码的样子,以及这是否是表达你想要的语义的最清晰的方式。
set { preTvoltage.AddRange(value); }
正如Jon Skeet所说,这不是你应该做的。相反,你应该这样做
TestClass t = new TestClass();
t.PreTvoltage.Add(...);
将财产声明为
public List<double> PreTvoltage
{
get { return preTvoltage; }
}
公共列表
{
获取{return preTvoltage;}
}
getter和setter的类型必须匹配
你可以:
public List<double> preTvoltage
{
get
{
return preTvoltage;
}
set
{
preTvoltage.AddRange(value); //add all items in list assigned.
}
}
公共列表
{
收到
{
返回电压;
}
设置
{
preTvoltage.AddRange(value);//添加指定列表中的所有项。
}
}
然而,这似乎是一个坏主意,因为它会让用户混淆为什么得到的值与刚刚设置的值不匹配。我会将这两个操作作为单独的成员,setter要么不存在,要么完全覆盖现有的
preTvoltage
。您不能这样实现它,最好的方法是创建如下收集控件:
private IList<double> _preTvoltage = new List<double>();
public IEnumerable<double> preTvoltage
{
get
{
return preTvoltage.AsEnumerable();
}
}
public void AddTvoltage(double item)
{
_preTvoltage.Add(item);
}
private IList\u preTvoltage=new List();
公共可数电压
{
收到
{
返回preTvoltage.AsEnumerable();
}
}
公共无效附加电压(双项)
{
_预处理电压。添加(项目);
}
我通过以下方式解决了我的问题:
public class ITestData
{
public string pinName { get; set; } //Name of the pin
public double stressLevel { get; set; } //Stress level for latchup
public int psuCount { get; set;} //Number of PSU's
public List<double[]> preTrigger = new List<double[]>();
public List<double[]> inTrigger = new List<double[]>();
public List<double[]> postTrigger = new List<double[]>();
public void AddPreTrigger(double volt, double curr)
{
double[] data = new double[2];
data[0] = volt;
data[1] = curr;
preTrigger.Add(data);
}
public void AddInTrigger(double volt, double curr)
{
double[] data = new double[2];
data[0] = volt;
data[1] = curr;
inTrigger.Add(data);
}
public void AddPostTrigger(double volt, double curr)
{
double[] data = new double[2];
data[0] = volt;
data[1] = curr;
postTrigger.Add(data);
}
}
公共类ITestData
{
公共字符串pinName{get;set;}//pin的名称
公共双应力水平{get;set;}//闭锁的应力水平
public int psuCount{get;set;}//PSU的数量
public List preTrigger=新列表();
public List inTrigger=新列表();
public List postTrigger=new List();
公用预紧器(双电压、双电流)
{
double[]数据=新的double[2];
数据[0]=伏特;
数据[1]=货币;
添加(数据);
}
公共真空附加调压器(双电压、双电流)
{
double[]数据=新的double[2];
数据[0]=伏特;
数据[1]=货币;
inTrigger.Add(数据);
}
公共无效AddPostTrigger(双电压、双电流)
{
double[]数据=新的double[2];
数据[0]=伏特;
数据[1]=货币;
添加(数据);
}
}
您想做什么?你的目标是什么?当分配一个新列表(这意味着集合)时,您想添加您的类(包含列表)。。为什么?我正在更新问题,请稍后再试。请不要工作。您试图在列表中添加列表
,而不是在列表
@Otiel中添加double
,不,我不是。我正在尝试添加范围
一个列表
,这确实有效。这可能是个坏主意,或者不是他们真正想要的,但我已经注意到了。你是对的,我读得太快,认为Add
而不是AddRange
。我错了。@Otiel:不,你没有看错答案。在第一个版本中,它实际上是说Add
。这就是为什么我用正确的AddRange
发布我的答案。乔恩一定是在你写评论的同时修复了他的“bug”,是吗?我本可以把它修复为一个太明显的错误,甚至记不住修复了,但如果是这样的话,这是一个太明显的错误,我甚至记不住修复了……;)是的,我同意,但那只是我知识的局限。我用我想做的更新了问题。请看一看。@Sean87:仍然不清楚您希望代码是什么样子,以及为什么要使用属性设置器。有点难以解释,我想使用XML原理图中的数据创建一个类似于问题中的ListView。让我们这样想:我只希望将pin#J6添加到ListView中,这将是3行。但列的数量因文件而异,所以我需要知道在添加行之前应该添加多少列。列的数量应该是PSU数量的两倍(这在XML文件中是可用的),因为每个PSU需要一列电压和一列电流。前5列始终是固定的。如果还不清楚,请告诉我。谢谢您的帮助。@Sean87:您认为代码应该是什么样子,或者为什么要在setter中添加一些东西,现在还不清楚。编写理想的代码来使用这个类,并展示它,然后研究如何实现它。我怀疑