Tag: C#的

使用LINQ将列表转换为字典,而不必担心重复

我有一个Person对象列表。 我想转换为一个字典,其中的关键是名和姓(连接),值是Person对象。 问题是我有一些重复的人,所以如果我使用这个代码,这将炸毁: private Dictionary<string, Person> _people = new Dictionary<string, Person>(); _people = personList.ToDictionary( e => e.FirstandLastName, StringComparer.OrdinalIgnoreCase); 我知道这听起来很奇怪,但我现在不太在乎重复的名字。 如果有多个名字,我只想抓住一个。 有没有反正我可以写上面的代码,所以它只是一个名字,不会炸毁重复?

何时处置CancellationTokenSource?

CancellationTokenSource类是一次性的,快速查看reflection器certificate非常可能KernelEvent托pipe资源KernelEvent 。 它没有终结者,所以如果我们不处理,GC就不会这样做。 另一方面,如果您查看MSDN取消文章中的示例,则除了一个之外,所有代码片段都不会这样做。 在代码中find正确的位置和时间似乎很难。 如果你不等待,你不能用代码开始你的并行任务。 只有在不等待的情况下,取消才有意义。 当然,你可以用Dispose调用在任务上添加ContinueWith ,但是这是怎么回事? 关于可取消的PLINQ查询,哪些不同步,但只是在最后做些什么? 比方说.ForAll(x => Console.Write(x)) ? 它可重用吗? 我们可以重复使用相同的标记进行多个调用,然后将其与主机组件一起处理,让我们说UI控制? 因为它没有类似Reset方法来清理IsCancelRequested和Token字段,所以我认为它是不可重用的,因此每次启动任务(或PLINQ查询)时都应该创build一个新的。 这是真的吗? 如果是的话,我的问题是什么是正确的和build议的策略来处理这些许多CancellationTokenSource实例处理?

为什么这个代码抛出'集合被修改',但是当我迭代它之前的东西,它不?

var ints = new List< int >( new[ ] { 1, 2, 3, 4, 5 } ); var first = true; foreach( var v in ints ) { if ( first ) { for ( long i = 0 ; i < int.MaxValue ; ++i ) { //<– The thing I iterate ints.Add( 1 ); […]

Pimpl成语与纯虚拟类接口

我想知道是什么让程序员selectPimpl成语或纯虚拟类和inheritance。 我明白,pimpl习语为每个公共方法和对象创build开销带来了一个明确的额外间接。 纯虚拟类在另一方面带有隐式间接(vtable)的inheritance实现,我明白,没有对象创build开销。 编辑 :但是你会需要一个工厂,如果你从外面创build对象 是什么使得纯粹的虚拟阶级比俚语成语更不可取?

为什么我可以创build一个名为“var”的类?

是不是在C#中的关键字? 但为什么我可以这样做: public class var { } public class main { public static void main(string[] args) { var testVar = new var(); } } 代码中使用的var是在main类之前声明的var类。 而编译器甚至不抱怨。 当我这样做的时候: public class int { } 或这个: public class true { } 编译器说int或者是一个关键字,不能像那样使用。 为什么与var不一样?

最好的介绍C + +模板元编程?

静态元编程(又名“模板元编程”)是一个非常棒的C ++技术,允许在编译时执行程序。 当我阅读这个典型的元编程例子时,一个灯泡在我脑海中消失了: #include <iostream> using namespace std; template< int n > struct factorial { enum { ret = factorial< n – 1 >::ret * n }; }; template<> struct factorial< 0 > { enum { ret = 1 }; }; int main() { cout << "7! = " << factorial< 7 >::ret << endl; […]

IEqualityComparer <T>和IEquatable <T>有什么区别?

我想了解应该使用IEqualityComparer<T>和IEquatable<T>的场景。 两个MSDN文档看起来非常相似。

如何用毫秒测量时间使用ANSI C?

只使用ANSI C,有没有什么方法可以用毫秒精度或更高来度量时间? 我正在浏览time.h,但我只发现了第二个精度函数。

从属DLL不被复制到Visual Studio中的生成输出文件夹

我有一个视觉工作室解决scheme。 我在解决scheme中有很多项目。 有一个主要项目是启动和使用其他项目。 有一个项目说“ProjectX”。 其参考被添加到主项目。 ProjectX引用另一个.NET dll(比如说abc.dll),它不是解决scheme的一部分。 现在这个abc.dll应该被复制到主项目的bin / debug文件夹中,但是它不会被复制到那里。 为什么它不被复制,任何已知的原因?

迭代通过std :: map的顺序是否已知(并由标准保证)?

我的意思是 – 我们知道std::map的元素是根据键来sorting的。 所以,假设键是整数。 如果我使用for来从std::map::begin()迭代到std::map::end() ,那么标准保证我将通过带有键的元素迭代,按照升序sorting? 例: std::map<int, int> map_; map_[1] = 2; map_[2] = 3; map_[3] = 4; for( std::map<int, int>::iterator iter = map_.begin(); iter != map_.end(); ++iter ) { std::cout << iter->second; } 这是保证打印234还是它的实现定义? 真实的原因:我有一个std::map int键。 在非常罕见的情况下,我想遍历所有元素,大于一个具体的int值。 是的,这听起来像std::vector将是更好的select,但注意到我的“非常罕见的情况下”。 编辑 :我知道, std::map的元素是sorting..没有必要指出(大部分的答案在这里)。 我甚至写在我的问题。 当我迭代一个容器时,我正在询问迭代器和顺序。 谢谢@Kerrek SB的答案。