Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向列表中动态添加值<;双倍>;使用get&;设置_C#_List_Properties - Fatal编程技术网

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中添加一些东西,现在还不清楚。编写理想的代码来使用这个类,并展示它,然后研究如何实现它。我怀疑