Tag: C#的

STL或Qt容器?

使用Qt容器( QMap , QVector等)对STL等价物有什么优缺点? 我可以看到一个更喜欢Qt的理由: Qt容器可以传递给Qt的其他部分。 例如,它们可以用来填充一个QVariant然后一个QSettings (尽pipe只有QList和QMap / QHash的键被string接受)。 还有其他的吗? 编辑 :假设应用程序已经依赖于Qt。

为什么使用yield关键字时,我只能使用普通的IEnumerable?

鉴于此代码: IEnumerable<object> FilteredList() { foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) yield return item; } } 为什么我不应该这样编码? IEnumerable<object> FilteredList() { var list = new List<object>(); foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) list.Add(item); } return list; } 我有点理解yield关键字的作用。 它告诉编译器构build某种types的东西(一个迭代器)。 但是为什么使用它? 除了less一些代码之外,它对我有什么作用呢?

从C#中的pathstring获取文件名

我在WPF C#中编程。 我有例如以下path: C:\Program Files\hello.txt 我想输出“ 你好 ”。 该path是从数据库提取的string。 目前我正在使用下面的方法(由'\'拆分path,然后再由'。'拆分): string path = "C:\\Program Files\\hello.txt"; string[] pathArr = path.Split('\\'); string[] fileArr = pathArr.Last().Split('.'); string fileName = fileArr.Last().ToString(); 它的工作,但我相信应该有更短,更聪明的解决scheme。 任何想法?

在C ++ for循环之前从未见过

我正在将C ++algorithm转换为C#。 我碰到这个循环: for (u = b.size(), v = b.back(); u–; v = p[v]) b[u] = v; 它在C ++中没有提供任何错误,但它在C#中(不能将int转换为bool)。 我真的不知道这个循环,条件在哪里? 有人可以解释吗? PS。 只是为了检查,为了使一个VECTOR适应一个LIST,b.back()是否对应于b [b.Count-1]?

C ++中不必要的花括号?

今天为同事做代码审查时,我看到了一个奇特的事情。 他用这样的大括号包围了他的新代码: Constructor::Constructor() { existing code { New code: do some new fancy stuff here } existing code } 如果有,结果如何? 这可能是什么原因呢? 这种习惯从哪里来? 编辑: 基于下面的input和一些问题,我觉得我必须补充一些问题,尽pipe我已经标记了一个答案。 环境是embedded式设备。 C ++服装中包含了很多遗留的C代码。 有很多C转向C ++开发人员。 在这部分代码中没有关键部分。 我只在代码的这一部分看到它。 没有大的内存分配完成,只是一些设置的标志,有些twiddling。 用花括号包围的代码就像这样: { bool isInit; (void)isStillInInitMode(&isInit); if (isInit) { return isInit; } } (不要介意代码,只要坚持花括号…))大括号后,有一些更多的twiddling,状态检查,和基本信号。 我和那个人交谈,他的动机是限制variables的范围,命名冲突,以及其他一些我无法理解的东西。 从我的POV来看,这似乎相当奇怪,我不认为大括号应该在我们的代码中。 我在所有答案中看到了一些很好的例子,为什么用花括号包围代码,但是不应该将代码分解成方法吗?

如何在C ++中初始化一个向量

可能重复: C ++:用硬编码元素初始化STL向量的最简单的方法 我想像在数组的情况下一样初始化vector。 例 int vv[2] = {12, 43}; 但是当我这样做的时候, vector<int> v(2) = {34, 23}; 要么 vector<int> v(2); v = {0, 9}; 它给出了一个错误: 期望在“{”令牌之前的主expression式 和 错误:预期','或';' 在'='标记之前 分别。

C# – select性地禁止自定义过期警告

如果使用某个方法,我使用Obsolete属性(就像其他程序员build议的那样)显示警告。 有没有一种方法来抑制类似CodeAnalysis'SuppressMessage的警告在使用是合理的点? 谢谢! 编辑 这是[Obsolete("Some message")]因为我需要包含有关警告的一些细节。 但是, #pragma warning disable 612不再工作了,只要我将消息添加到裸[Obsolete]属性… 编辑2 find正确的警告号码 – 如果您在过时属性后面有消息,则为618 。 所以要做我想做的事情: #pragma warning disable 618 然后在通话之后 #pragma warning restore 618 感谢Jared Par和Jon Skeet指引我朝着正确的方向发展!

WPF用户控件父

我有一个用户控件,我在运行时加载到一个MainWindow 。 我无法从UserControl获取包含窗口的句柄。 我已经试过this.Parent ,但它总是空。 有谁知道如何从WPF中的用户控件获取包含窗口句柄? 这里是如何加载控制: private void XMLLogViewer_MenuItem_Click(object sender, RoutedEventArgs e) { MenuItem application = sender as MenuItem; string parameter = application.CommandParameter as string; string controlName = parameter; if (uxPanel.Children.Count == 0) { System.Runtime.Remoting.ObjectHandle instance = Activator.CreateInstance(Assembly.GetExecutingAssembly().FullName, controlName); UserControl control = instance.Unwrap() as UserControl; this.LoadControl(control); } } private void LoadControl(UserControl control) { if […]

如何发布JSON到服务器?

以下是我正在使用的代码: // create a request HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "POST"; // turn our request string into a byte stream byte[] postBytes = Encoding.UTF8.GetBytes(json); // this is important – make sure you specify type this way request.ContentType = "application/json; charset=UTF-8"; request.Accept = "application/json"; request.ContentLength = postBytes.Length; request.CookieContainer […]

确定映射是否包含键的值?

确定一个STL映射是否包含给定键的值的最好方法是什么? #include <map> using namespace std; struct Bar { int i; }; int main() { map<int, Bar> m; Bar b = {0}; Bar b1 = {1}; m[0] = b; m[1] = b1; //Bar b2 = m[2]; map<int, Bar>::iterator iter = m.find(2); Bar b3 = iter->second; } 在debugging器中检查它,看起来像是垃圾数据。 如果我取消注释掉这一行: Bar b2 = m[2] debugging器显示b2是{i = 0} […]