可能重复: 为什么IEnumerable接口上没有ForEach扩展方法? 编辑 作为参考,这里是eric在评论中提到的博客文章 http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx 弊 更多的好奇心,我想,但一个为C#规范Savants … 为什么ForEach()子句不能在IQueryable / IEnumerable结果集上使用(或不可用)… 你必须首先转换你的结果ToList()或ToArray()推测这是一个技术限制的方式C#迭代IEnumerables比。 列表…是否与IEnumerables / IQuerable集合的延期执行有关。 例如 var userAgentStrings = uasdc.UserAgentStrings .Where<UserAgentString>(p => p.DeviceID == 0 && !p.UserAgentString1.Contains("msie")); //WORKS userAgentStrings.ToList().ForEach(uas => ProcessUserAgentString(uas)); //WORKS Array.ForEach(userAgentStrings.ToArray(), uas => ProcessUserAgentString(uas)); //Doesn't WORK userAgentStrings.ForEach(uas => ProcessUserAgentString(uas));
我有一个vector<int>容器有整数(例如{1,2,3,4}),我想转换为一个forms的string "1,2,3,4" 在C ++中最干净的方法是什么? 在Python中,这是我将如何做到这一点: >>> array = [1,2,3,4] >>> ",".join(map(str,array)) '1,2,3,4'
今天我遇到了一个有趣的问题。 考虑这个简单的例子: template <typename T> void foo(const T & a) { /* code */ } // This would also fail // void foo(const int & a) { /* code */ } class Bar { public: static const int kConst = 1; void func() { foo(kConst); // This is the important line } }; int main() […]
从http://en.cppreference.com/w/cpp/string/byte/memcpy : 如果对象不是TriviallyCopyable (例如标量,数组,C兼容结构),则行为是未定义的。 在我的工作中,我们已经使用std::memcpy很长时间来按位交换不是TriviallyCopyable的对象: void swapMemory(Entity* ePtr1, Entity* ePtr2) { static const int size = sizeof(Entity); char swapBuffer[size]; memcpy(swapBuffer, ePtr1, size); memcpy(ePtr1, ePtr2, size); memcpy(ePtr2, swapBuffer, size); } 从来没有任何问题。 我明白,滥用std::memcpy与非TriviallyCopyable对象并导致下游未定义的行为是微不足道的。 不过,我的问题是: 为什么在使用非TriviallyCopyable对象时, std::memcpy本身的行为是未定义的? 为什么标准认为有必要指定? UPDATE http://en.cppreference.com/w/cpp/string/byte/memcpy的内容已经被修改,以回应这个post和post的答案。 目前的描述说: 如果对象不是TriviallyCopyable (例如标量,数组,C兼容结构),则行为是不确定的,除非程序不依赖于目标对象(不由memcpy运行)的析构函数的效果以及目标对象(已结束,但未由memcpy启动)通过其他方式启动,如placement-new。 PS 评论者@Cubbi: @RSahu如果有东西保证UB下游,它呈现整个程序未定义。 但我同意,在这种情况下,似乎有可能绕过UB,并相应地修改相关的参考。
我有一个ContextMenuStrip分配给几个不同的列表框。 我试图找出什么时候ContextMenuStrip被点击什么ListBox它使用。 我尝试下面的代码作为开始,但它不工作。 sender有正确的值,但是当我尝试将其分配给menuSubmitted它为空。 private void MenuViewDetails_Click(object sender, EventArgs e) { ContextMenu menuSubmitted = sender as ContextMenu; if (menuSubmitted != null) { Control sourceControl = menuSubmitted.SourceControl; } } 任何帮助将是伟大的。 谢谢。 使用下面的帮助,我发现: private void MenuViewDetails_Click(object sender, EventArgs e) { ToolStripMenuItem menuItem = sender as ToolStripMenuItem; if (menuItem != null) { ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip; […]
能够超载的将是非常有用的。 运算符在C ++中,并返回一个对象的引用。 你可以重载operator->和operator*而不是operator. 有这个技术原因吗?
我有下面的示例代码,每次按下一个button时缩放: XAML: <Window x:Class="WpfApplication12.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Canvas x:Name="myCanvas"> <Canvas.LayoutTransform> <ScaleTransform x:Name="myScaleTransform" /> </Canvas.LayoutTransform> <Button Content="Button" Name="myButton" Canvas.Left="50" Canvas.Top="50" Click="myButton_Click" /> </Canvas> </Window> *的.cs public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void myButton_Click(object sender, RoutedEventArgs e) { Console.WriteLine("scale {0}, location: {1}", myScaleTransform.ScaleX, myCanvas.PointToScreen(GetMyByttonLocation())); myScaleTransform.ScaleX = myScaleTransform.ScaleY = […]
假设我得到一个XmlNode,并且我想为attirbute“Name”赋值。 我怎样才能做到这一点?? XmlTextReader reader = new XmlTextReader(path); XmlDocument doc = new XmlDocument(); XmlNode node = doc.ReadNode(reader); foreach (XmlNode chldNode in node.ChildNodes) { **//Read the attribute Name** if (chldNode.Name == Employee) { if (chldNode.HasChildNodes) { foreach (XmlNode item in node.ChildNodes) { } } } } XMl文件: <Root> <Employee Name ="TestName"> <Childs/> </Root>
在debugging时,输出窗口中的线程退出代码究竟是什么? 它给了我什么信息? 这是不是有用的或只是一个内部的东西,不应该打扰我? The thread 0x552c has exited with code 259 (0x103). The thread 0x4440 has exited with code 0 (0x0). 是否可能有某种可能的退出代码列表及其意义?
在C#中,使用Regex类,如何parsing逗号分隔的值,其中一些值可能是引用的string本身包含逗号? using System ; using System.Text.RegularExpressions ; class Example { public static void Main ( ) { string myString = "cat,dog,\"0 = OFF, 1 = ON\",lion,tiger,'R = red, G = green, B = blue',bear" ; Console.WriteLine ( "\nmyString is …\n\t" + myString + "\n" ) ; Regex regex = new Regex ( "(?<=,(\"|\')).*?(?=(\"|\'),)|(^.*?(?=,))|((?<=,).*?(?=,))|((?<=,).*?$)" ) ; […]