Tag: C#的

为什么不能重载类模板?

读这个问题让我怀疑:是否有一个技术原因不允许类模板重载? 通过重载,我的意思是有几个相同名称的模板,但不同的参数,例如 template <typename T> struct Foo {}; template <typename T1, typename T2> struct Foo {}; template <unsigned int N> struct Foo {}; 编译器pipe理处理重载的函数和函数模板,是不是可以应用类模板相同的技术(例如名称修改)? 起初,我认为也许这会在单独使用模板标识符时造成一些模糊性问题,但唯一可能发生的情况是将其作为模板模板parameter passing,因此可以使用参数的types来select适当的超载: template <template <typename> class T> void A {}; template <template <unsigned int> class T> void B {}; A<Foo> a; // resolves to Foo<T> B<Foo> b; // resolves to Foo<N> […]

如何写一个无符号的短整型文字?

42作为unsigned int定义为“42U”。 unsigned int foo = 42U; // yeah! 我怎么能写“23”,以便清楚它是一个无符号短整型? unsigned short bar = 23; // booh! not clear! 编辑,使问题的含义更加明确: template <class T> void doSomething(T) { std::cout << "unknown type" << std::endl; } template<> void doSomething(unsigned int) { std::cout << "unsigned int" << std::endl; } template<> void doSomething(unsigned short) { std::cout << "unsigned short" << […]

Enumerable.Single的错误实现?

我通过reflection器在Enumerable.cs中遇到了这个实现。 public static TSource Single<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { //check parameters TSource local = default(TSource); long num = 0L; foreach (TSource local2 in source) { if (predicate(local2)) { local = local2; num += 1L; //I think they should do something here like: //if (num >= 2L) throw Error.MoreThanOneMatch(); //no necessary to continue } […]

genericsNOT约束在T:!IEnumerable

按照标题,是否有可能在c#4中声明types – 否定约束?

asynchronous编程与线程有什么不同?

我一直在阅读一些async文章: http : //www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45和作者说: 当你在做asynchronous工作时,你并不总是使用一个线程。 例如,当您发出asynchronousWeb服务请求时,ASP.NET将不会在async方法调用和await之间使用任何线程。 所以我想了解的是,如果我们不使用任何线程来执行并发,它将如何变成async ? 这是什么意思“你不总是使用一个线程”? 让我首先解释一下我所知道的有关使用线程的知识(一个简单的例子,当然,除了UI和Worker方法之外,线程可以用于不同的情况) 你有UI线程input输出。 您可以在UI线程中处理事情,但它会使UI无响应。 因此,让我们说我们有一个stream相关的操作,我们需要下载一些数据。 而且我们还允许用户在下载时做其他事情。 我们创build一个新的工作线程,下载文件并更改进度条。 一旦完成,就没有什么可做的,所以线程被杀死了。 我们继续从UI线程。 我们可以根据情况等待UI线程中的工作线程,但在此之前,在下载文件的同时,我们可以使用UI线程做其他事情,然后等待工作线程。 async编程不一样吗? 如果不是,有什么区别? 我读了async编程使用ThreadPool从拉线虽然。

你将如何在C ++ 11中实现自己的读写器locking?

我有一套数据结构,需要使用读写器锁保护。 我知道boost :: shared_lock,但我想有一个使用std :: mutex,std :: condition_variable和/或std :: atomic的自定义实现,以便我可以更好地理解它是如何工作的(并稍后调整它) 。 每个数据结构(可移动,但不可复制)将从一个称为Commons的类inheritance,该类封装了locking。 我想公共界面看起来像这样: class Commons { public: void read_lock(); bool try_read_lock(); void read_unlock(); void write_lock(); bool try_write_lock(); void write_unlock(); }; …所以它可以被一些公开的inheritance: class DataStructure : public Commons {}; 我正在写科学的代码,通常可以避免数据竞赛; 这个锁主要是防止我以后可能会犯的错误。 因此我的优先级是低的读取开销,所以我不会妨碍正确运行的程序太多。 每个线程都可能运行在自己的CPU内核上。 你能告诉我(伪代码是好的)读者/写作者锁? 我现在所拥有的应该是防止作家饥饿的变种。 到目前为止,我的主要问题是read_lock在检查read是否安全以实际递增读取器计数之间的差距,之后write_lock知道要等待。 void Commons::write_lock() { write_mutex.lock(); reading_mode.store(false); while(readers.load() > 0) {} } void […]

OrderedDictionary和Dictionary

我正在寻找一种方法来让我的Dictionary按照它们添加的顺序来枚举它的KeyValuePair 。 现在, Dictionary的文档明确指出: 为了枚举的目的,字典中的每个项目都被当作一个KeyValuePair<TKey, TValue>结构来表示一个值及其关键字。 项目返回的顺序是未定义的。 我发现我需要的是一个OrderedDictionary ,但作为我的怀疑论者,我决定自己尝试一下: OrderedDictionary od = new OrderedDictionary(); Dictionary<String, String> d = new Dictionary<String, String>(); for (int i = 0; i < 10; i++ ) { od.Add("key"+i,"value"+i); d.Add("key"+i,"value"+i); } System.Console.WriteLine("OrderedDictionary"); foreach (DictionaryEntry de in od) { System.Console.WriteLine(de.Key +", " +de.Value); } System.Console.WriteLine("Dictionary"); foreach (var tmp in d) { System.Console.WriteLine(tmp.Key […]

智能指针/ C安全内存pipe理?

我和其他许多人使用智能指针在C ++中使用诸如RAII等这样的东西来包装不安全的内存操作,取得了巨大的成功。 但是,如果有析构函数,类,操作符重载等,则包装内存pipe理更容易实现。 对于使用原始C99编写的程序,您可以在哪里指出(无意双关)来帮助安全的内存pipe理? 谢谢。

如果catch和finally块都抛出exception,会发生什么?

如果catch和finally块都抛出exception,会发生什么?

什么是.csproj文件?

通常一个C#项目有一个.csproj文件关联。 那是什么文件? 它包含哪些数据?