Tag: C#的

.NET 4.0中的只读列表或不可修改的列表

据我所知,.NET 4.0仍然缺less只读列表。 为什么框架仍然缺乏这种function? 这不是这个领域驱动devise最常见的function之一吗? Java相对于C#来说less有的优势之一就是Collections.unmodifiablelist(list)方法的forms,它在IList <T>或List <T>中看起来已经过时了很久。 使用IEnumerable<T>是问题的最简单的解决scheme – ToList可以使用并返回一个副本。

#if定义(WIN32)和#ifdef(WIN32)之间的区别

我正在编译我的程序,将运行在Linux的GCC 4.4.1 C99。 我只是把我的#defines分开将在Windows或Linux上编译的代码。 但是,我得到这个错误。 error: macro names must be identifiers. 使用这个代码 #ifdef(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif 但是,当我改变到这个错误是固定的: #if defined(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif 我只是想知道为什么我得到这个错误,为什么#定义是不同的? 非常感谢,

const引用参数

以下声明是否有区别? void somefunc(const Person &p); void somefunc(Person const &p);

locking声明有多昂贵?

我一直在尝试multithreading和并行处理,我需要一个计数器对处理速度进行一些基本的计数和统计分析。 为了避免同时使用我的类的问题我已经在我的类的私有variables上使用了一个locking语句: private object mutex = new object(); public void Count(int amount) { lock(mutex) { done += amount; } } 但我想知道…locking一个variables有多昂贵? 对性能有什么负面影响?

如何用out参数编写asynchronous方法?

我想写一个out参数的asynchronous方法,如下所示: public async void Method1() { int op; int result = await GetDataTaskAsync(out op); } 如何在GetDataTaskAsync执行此操作?

是否有可能在.NET中以彩色写入控制台?

编写一个小的命令行工具,这将是很好的输出不同的颜色。 这可能吗?

LINQ中的LIKE运算符

有什么办法来比较类似于SQL的LIKE运算符的C#LINQexpression式中的string吗? 假设我有一个string列表。 在这个列表中,我想search一个string。 在SQL中,我可以写: SELECT * FROM DischargePort WHERE PortName LIKE '%BALTIMORE%' 而不是上面,查询需要一个linq语法。 using System.Text.RegularExpressions; … var regex = new Regex(sDischargePort, RegexOptions.IgnoreCase); var sPortCode = Database.DischargePorts .Where(p => regex.IsMatch(p.PortName)) .Single().PortCode; 我上面的LINQ语法不起作用。 我错了什么?

“除了最后一个”(或“在每一对连续的元素之间”)的习语(重复)

大家在某个时候遇到这个问题: for(const auto& item : items) { cout << item << separator; } …你最后得到一个你不想要的额外的分隔符。 有时不是打印,而是执行一些其他操作,但是这种连续的相同types的操作需要一些分隔符操作 – 但最后一个操作不会。 现在,如果你使用老式的循环和数组,你会这样做 for(int i = 0; i < num_items; i++) cout << items[i]; if (i < num_items – 1) { cout << separator; } } (或者你可以把最后一个项目圈出来)。如果你有任何允许非破坏性迭代器的东西,即使你不知道它的大小,你也可以这样做: for(auto it = items.cbegin(); it != items.cend(); it++) { cout << *it; if […]

是否使用堆内存(malloc / new)创build一个非确定性的程序?

几个月前我开始用C开发空间应用程序的软件,也用C ++开发微控制器。 在这样的系统中有一个经验法则,那就是不应该创build堆对象 (所以不需要malloc / new),因为它使得程序不确定 。 当人们告诉我时,我无法validation这个声明的正确性。 那么这是一个正确的说法吗? 对我来说,困惑是,就我所知,决定论意味着运行一个程序两次将导致完全相同的执行path。 从我的理解,这是一个multithreading系统的问题,因为多次运行相同的程序可能会有不同的线程在不同的次序运行。

在C#中logging错误

我正在从C ++编码切换到C#。 我需要用C#中类似的东西来replace我的C ++错误logging/报告macros系统。 在我的C ++源代码中,我可以写 LOGERR(“有些错误”); 或LOGERR(“错误与input%s和%d”,stringvar,intvar); macros和支持库代码然后将(可能是可变长度)格式的消息与源文件,源代码行,用户名和时间一起传递到数据库中。 同样的数据也被塞入到数据结构中,以便稍后向用户报告。 有没有人有C#代码片段或指针来做这个基本的错误报告/日志logging的例子? 编辑:当时我问这个问题,我真的是新的.NET,并不知道System.Diagnostics.Trace。 System.Diagnostics.Trace是我当时需要的。 从那以后,我在log日志需求更大,更复杂的项目上使用了log4net。 只需编辑500行XMLconfiguration文件和log4net将做你会需要的一切:)