Tag: C#的

什么是物化?

我知道Java使用擦除来实现参数化多态(generics)。 我明白什么是删除。 我知道C#通过实现实现参数化多态性。 我知道,可以让你写 public void dosomething(List<String> input) {} public void dosomething(List<Int> input) {} 或者你可以在运行时知道某些参数化types的types参数是什么,但我不明白它是什么。 什么是物化types? 什么是物化价值? 当一个types/值被通用时会发生什么?

Exception.Message vs Exception.ToString()

我有loggingException.Message代码。 不过,我读了一篇文章,指出最好使用Exception.ToString() 。 使用后者,您可以保留有关错误的更多重要信息。 这是真的,是否安全地继续并取代所有代码日志loggingException.Message ? 我也使用基于XML的布局log4net 。 Exception.ToString()可能包含无效的XML字符,这可能会导致问题吗?

何时不使用收益率(return)

这个问题在这里已经有了答案: 返回一个IEnumerable的时候有没有理由不使用“yield return”? 关于yield return的好处,这里有几个有用的问题。 例如, 有人可以揭开yield关键字的神秘面纱吗? 有趣的使用C#收益 关键词 什么是yield关键字 我正在寻找什么时候不使用yield return想法。 例如,如果我期望需要返回集合中的所有项目,那么yield 似乎不会有用,对吧? 有什么情况下使用yield将是有限的,不必要的,让我陷入困境,否则应该避免?

如何向初学者解释C指针(声明与一元运算符)?

我最近很高兴地解释了一个C编程初学者的指针,并偶然发现了以下困难。 如果你已经知道如何使用指针,可能看起来并不是一个问题,但是试着用清晰的头脑来看下面的例子: int foo = 1; int *bar = &foo; printf("%p\n", (void *)&foo); printf("%i\n", *bar); 对于绝对的初学者来说,输出可能是令人惊讶的。 在第二行他/她刚刚宣布*酒吧是&富,但在第4行,结果是*酒吧实际上是富而不是&富! 你可能会说,这个混淆源于*符号的模糊性:在第2行中,它被用来声明一个指针。 在第4行中,它被用作一个一元运算符,它获取指针指向的值。 两个不同的东西,对吧? 然而,这个“解释”根本没有帮助初学者。 它通过指出一个微妙的差异来引入一个新的概念。 这不可能是教它的正确方法。 那么Kernighan和Ritchie怎么解释呢? 一元运算符*是间接或解引用运算符; 当应用于指针时,它访问指针指向的对象。 […] 指针ip, int *ip的声明是用作助记符的; 它表示*ipexpression式是一个int。 variables声明的语法模仿variables可能出现的expression式的语法 。 int *ip应该像“ *ip将返回一个int ”读取? 但是,为什么宣布后的任务不遵循这种模式呢? 如果初学者想要初始化variables呢? int *ip = 1 (读取: *ip将返回一个int并且int是1 )将无法按预期工作。 概念模型看起来并不一致。 我在这里错过了什么? 编辑: 它试图总结这里的答案 。

如何在Qt Creator中启用C ++ 11?

标题很自我描述。 我已经下载了Qt Creator 2.7.0,我正在编译一些基本的C ++ 11代码: int my_array[5] = {1, 2, 3, 4, 5}; for(int &x : my_array) { x *= 2; } 我收到以下错误: range based for loops are not allowed in c++ 98 mode 然而,根据这篇文章,这个版本的Qt Creator支持C ++ 11。 那么如何启用它?

什么是C#中的bigint相当于?

在C#中处理一个值时,我应该使用什么,这对于SQL Server数据库来说是bigint?

如何在C#中默认参数Guid.Empty?

我想说: public void Problem(Guid optional = Guid.Empty) { } 但编译器抱怨Guid.Empty不是一个编译时间常量。 由于我不想更改API,我不能使用: Nullable<Guid>

为什么(a%256)与(a&0xFF)不同?

我总是假设在做(a % 256) ,优化器自然会使用有效的按位操作,就好像我写了(a & 0xFF) 。 在编译器浏览器gcc-6.2(-O3)上testing时: // Type your code here, or load an example. int mod(int num) { return num % 256; } mod(int): mov edx, edi sar edx, 31 shr edx, 24 lea eax, [rdi+rdx] movzx eax, al sub eax, edx ret 而当尝试其他代码: // Type your code here, or load an […]

C#中抽象类的构造方法

为什么可以在C#中为抽象类编写构造函数? 据我所知,我们不能实例化一个抽象类。所以它是什么? 你不能实例化这个类,对吧?

我应该在使用static_cast或reinterpret_cast时将void *转换为任何内容

static_cast和reinterpret_cast似乎都能很好地将void *转换为另一个指针types。 有一个很好的理由相互赞成吗?