在VS2013的C#中更新列表中每个元素的值

在VS2013的C#中更新列表中每个元素的值,c#,visual-studio,list,C#,Visual Studio,List,我需要在VS2013的C#中更新列表中每个元素的值 守则: var wl = myList.ToArray(); List<myElement> tl = new List<myElement>(); tl = givenList; // I need to update values in element in this list for(int p =0; p < wl.Count(); ++p) { decimal? fv = (wl[p].value

我需要在VS2013的C#中更新列表中每个元素的值

守则:

var wl = myList.ToArray();
List<myElement> tl = new List<myElement>();
tl = givenList; // I need to update values in element in this list
for(int p =0; p < wl.Count(); ++p)
{
    decimal? fv = (wl[p].value * 10) / ((decimal?)a_constant);
    tl.ToArray()[p].value = fv; // this cannot update the value
}
myList = tl;
var wl=myList.ToArray();
List tl=新列表();
tl=给定列表;//我需要更新此列表中元素中的值
对于(int p=0;p
但是,
tl.ToArray()[p].value=fv不更新该值


如果有任何帮助,我们将不胜感激。

您正在创建大量的变量,这些变量实际上没有什么作用,而且很难阅读。此外,您不需要一直呼叫
到阵列
尝试以下方法:

for(int p = 0; p < myList.Count; ++p)
{
    decimal? fv = (myList[p].value * 10) / ((decimal?)a_constant);
    givenList[p].value = fv;
}
for(int p=0;p
tl.ToArray()
创建每个元素的副本。我不确定代码中
myElement
的类型是什么,但如果它是
struct
或任何其他
值类型,则可以解释为什么不修改您的集合。您的代码将更新元素的副本,而不是元素本身

您可能需要先检查
myList[p]
是否为
null
,然后再检查
。value
。。。原因如果它是
null
您将点击error@Nic我同意,但不知道这种方法的具体用途,写一个客观上比简单地命中空引用异常要好的错误案例是很困难的:)如果我没记错的话,你可以删除
。Value
代码仍然可以工作,你也不会命中空引用异常:)@Nic取决于它是一个
可以为空的
还是仅仅是一个具有空引用异常的对象
value
属性(可能是后者,因为它是小写),只要答案正确:)。其余的由他决定,我们只是在讨论更好的错误处理方法。