Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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#修剪方法在动作内部不起作用_C#_Delegates - Fatal编程技术网

C#修剪方法在动作内部不起作用

C#修剪方法在动作内部不起作用,c#,delegates,C#,Delegates,我想修剪所有实体的某个属性。但是这个entity.ForEach(x=>x.PropertyName.Trim())似乎不起作用。执行操作后,属性中仍有空白。你知道怎么做才容易吗?试试这个 entity.ForEach(x => { x.PropertyName = x.PropertyName.Trim(); }); 您从未分配Trim()方法返回的新字符串值 如果要删除所有空格 创建一个新的列表对象(y)并使用修剪过的值重新创建对象列表。这是函数式编程 entity.For

我想修剪所有实体的某个属性。但是这个
entity.ForEach(x=>x.PropertyName.Trim())似乎不起作用。执行操作后,属性中仍有空白。你知道怎么做才容易吗?

试试这个

entity.ForEach(x => 
{
    x.PropertyName = x.PropertyName.Trim();
});
您从未分配Trim()方法返回的新字符串值

如果要删除所有空格


创建一个新的列表对象(y)并使用修剪过的值重新创建对象列表。这是函数式编程

entity.ForEach(x=>y.Add(新实体{PropertyName=x.PropertyName.Trim()}))

我之前发布了下面的代码-将不起作用,因为实体列表对象是不可变的。我为这个错误道歉。(忽略下面的代码)


首先,不应该使用
.ForEach()
方法,应该使用
ForEach
循环。其次,您遇到的实际问题是字符串是不可变的。调用
.Trim()
时,字符串本身未被修改,
Trim()
返回一个新字符串,因此需要将其分配给以下内容:

foreach(var e in entity)
{
    e.PropertyName = e.PropertyName.Trim();
}

您可能也希望对您的命名进行研究<代码>实体
意味着一个单数,在这里您可以非常清楚地看到它是一个集合,因为我们迭代了它。可能应该是
实体

字符串是不可变的。Trim返回所需的值。无论如何,使用
.ForEach()
是个坏主意。只需使用一个常规的
foreach
循环,记住字符串是不可变的,因此您必须将
Trim()
的结果分配给某个对象。@maccettura为什么使用foreach是个坏主意?@john Eric Lippert。表达式不应该引起副作用,它们应该计算一个值。使用
foreach
循环语句可以清楚地表明您的意图,并且您还可以在本例中为变量分配
variable.Trim()的结果。
您可能应该这样做。这篇文章是由语言设计团队的一位成员和.NET的一位全能专家撰写的。文章的核心论点没有改变,因为那是9年前的事了。该语言仍然是以一种方式设计的,
List
ForEach()
方法打破了这种模式。它很可能一开始就不应该包含在语言中(为什么您认为他们没有对
IEnumerable
?)进行同样的操作。您是否理解框架中删除部分的困难和影响?框架需要尽可能保持向后兼容。所有使用此方法的坏代码编写器会发生什么情况?现在.NET版本X已将其删除。。。他们的代码库将崩溃。有时人们会犯错误,有时纠正这些错误所花费的时间远远超过了它的价值。很明显,这被认为是一个错误,因为他们从来没有在
IEnumerable
中实现过相同的东西,这将比
列表
方法有更大的影响和用途。你在捍卫一件与被捍卫无关的事情。你可以随意编写所有你想要的反直觉的代码,但是带有这些代码的PRs在我工作过的任何地方都会被拒绝。该功能已经存在。它被称为
foreach
循环。除此之外,
goto
仍然存在,我希望您没有使用它!我已经不想再和你争论了,你的坏代码习惯最终不是我的问题。
entity.ForEach(x => x.PropertyName = x.PropertyName.Trim());
foreach(var e in entity)
{
    e.PropertyName = e.PropertyName.Trim();
}