Tag: C#的

子类/继承标准容器?

我经常阅读堆栈溢出这个语句。 就我个人而言,我没有发现任何问题,除非我以多形的方式使用它; 即我必须使用virtual析构函数。 如果我想扩展/添加标准容器的功能,那么比继承一个更好的方法是什么? 将这些容器包装在一个自定义类中需要更多的努力,并且仍然不干净。

为什么在C#中经常看到“null!= variable”而不是“variable!= null”呢?

在c#中,你声明条件的顺序在执行速度上有什么不同? if (null != variable) … if (variable != null) … 自从最近,我经常看到第一个,因为我习惯了第二个,所以引起了我的注意。 如果没有区别,第一个的优点是什么?

:(三元)运算符的好处

与标准的if-else语句相比,?:操作符有什么好处和缺点? 显而易见的是: 有条件的:操作员 处理直接价值比较和分配时更短,更简洁 似乎不像if / else结构那样灵活 标准如果/否 可以应用于更多的情况(如函数调用) 往往是不必要的长 可读性似乎根据声明而有所不同。 在第一次接触到?:操作符之后的一段时间,我花了一些时间来消化它的工作原理。 你会推荐在任何可能的地方使用它,或者坚持if / else,因为我和很多非程序员一起工作?

C逗号运算符的用法

你看它用于循环语句,但它是合法的语法在任何地方。 你在其他地方找到了什么用途,如果有的话?

导致死锁的异步/等待示例

我碰到一些使用c#的async / await关键字进行异步编程的最佳实践(我是c#5.0的新手)。 其中一个建议是: 稳定性:了解您的同步上下文 …一些同步上下文是不可重入和单线程的。 这意味着在给定的时间只能在上下文中执行一个工作单元。 这个例子是Windows UI线程或ASP.NET请求上下文。 在这些单线程的同步上下文中,自己很容易死锁。 如果你从一个单线程上下文中产生一个任务,那么等待上下文中的任务,你的等待代码可能会阻塞后台任务。 public ActionResult ActionAsync() { // DEADLOCK: this blocks on the async task var data = GetDataAsync().Result; return View(data); } private async Task<string> GetDataAsync() { // a very simple async method var result = await MyWebService.GetDataAsync(); return result.ToString(); } 如果我自己尝试剖析它,主线程会在“MyWebService.GetDataAsync();”中生成一个新线程,但是由于主线程在那里等待,它将等待“GetDataAsync()。Result”的结果。 同时,说数据已经准备好了。 为什么主线程不继续它的继续逻辑,并从GetDataAsync()返回字符串结果? 有人可以解释一下为什么在上面的例子中有一个僵局? 我完全不知道问题是什么

我应该使用int还是Int32

在C#中, int和Int32是一样的东西,但是我读了很多次, int比Int32更Int32 ,没有任何理由。 有一个原因,我应该关心吗?

如何从C#数组中删除重复项?

我一直在C#中的一个string[]数组,从函数调用返回。 我可能会投到一个Generic集合,但我想知道是否有更好的方法来做到这一点,可能通过使用临时数组。 什么是从C#数组中删除重复的最佳方法?

有人可以解释这个模板代码,给我一个数组的大小?

template<typename T, size_t n> size_t array_size(const T (&)[n]) { return n; } 我没有得到的部分是这个模板函数的参数。 当数组传递给数组时,会发生什么情况,数组中的元素个数为n ?

为什么在传递对象时使用'ref'关键字?

如果我传递一个对象到一个方法,为什么我应该使用ref关键字? 这不是默认行为吗? 例如: class Program { static void Main(string[] args) { TestRef t = new TestRef(); t.Something = "Foo"; DoSomething(t); Console.WriteLine(t.Something); } static public void DoSomething(TestRef t) { t.Something = "Bar"; } } public class TestRef { public string Something { get; set; } } 输出是“Bar”,这意味着对象被作为参考传递。

bool是一个本地C类型吗?

我注意到,Linux内核代码使用bool,但我认为bool是一个C ++类型。 bool是一个标准的C扩展(例如ISO C90)还是一个GCC扩展?