Tag: C#的

为什么C预处理器将枚举值视为相等?

为什么即使A和B不同,为什么下面的代码中的std::cout行仍然运行? #include <iostream> enum T { A = 1, B = 2 }; // #define A 1 // #define B 2 int main() { #if (A == B) std::cout << A << B; #endif } 如果我使用#define (如注释掉),我没有得到任何输出。 问题的理由: 我想有一个testing代码的模式select器,我可以轻松地通过注释/取消注释上面的行来改变模式: enum T { MODE_RGB = 1, MODE_GREY = 2, MODE_CMYK = 3 }; // #define MODE […]

C#反模式

长话短说:我发现Java反模式是不可或缺的资源。 对于初学者和专业人士一样多。 我还没有find这样的C#的东西。 所以我会把这个问题作为社区维基开放,并邀请大家分享他们的知识。 由于我是C#的新手,我对此非常感兴趣,但不能从一些反模式开始:/ 这里是我发现C#而不是其他语言的答案。 我只是复制/粘贴这些! 考虑一下看看这些评论。 抛出NullReferenceException 抛出exception: if (FooLicenceKeyHolder == null) throw new NullReferenceException(); 属性与公共variables 类中的公共variables(改为使用属性)。 除非这个类是一个简单的数据传输对象。 不理解,布尔是一个真正的types,不只是一个约定 if (myBooleanVariable == true) { … } 或者甚至更好 if (myBooleanVariable != false) { … } 像这样的构造经常被C和C++开发者使用,其中布尔值的概念只是一个约定(0 == false,其他都是真的)。 这在C#或其他有实际布尔值的语言中是没有必要的(或可取的)。 使用using() 在适当情况下不使用: object variable; variable.close(); //Old code, use IDisposable if available. variable.Dispose(); //Same as close. […]

Java / Net与AES之间的Interopencryption/解密以及指定IV和密钥

我正在尝试使用AES来实现对称encryption,其中指定了密钥和IV。 在每个生态系统(Java-> Java / .NET-> .NET)中,encryption和解密都是按照devise的方式工作的,但是如果我试图在两者之间进行操作,我会遇到大量有关填充等的错误。 我已经阅读了几个post,包括http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx,但似乎没有相同的用例。 这是我的代码: JAVA public class Main { public static void main(String[] args) throws Exception { String data = "Something to decrypt"; String encrypt = Encrypt(data); System.out.println(encrypt); String decrypt = Decrypt(encrypt); System.out.println(decrypt); } private static String Encrypt(String raw) throws Exception { Cipher c = getCipher(Cipher.ENCRYPT_MODE); byte[] encryptedVal = c.doFinal(raw.getBytes("UTF-8")); return […]

如何使用Qt 5.6在Android上运行NFC

我试图使用Qt的NFC模块在我的Android手机上阅读NFC标签。 根据这个页面 ,Qt将从5.6版本开始支持Android。 这个版本还没有发布,所以我从源码开始构build,遵循这个页面上的说明,并安装在Qt创build器中。 第一步是让标签/卡检测工作,我卡在那里。 我的testing应用程序实例化一个QNearFieldManager ,检查NFC是否可用,并将插槽连接到信号targetLost和targetLost 。 QNearFieldManager::isAvailable方法报告NFC是可用的(Qt 5.5没有),但是targetLost / targetLost信号永远不会被触发。 以下是我的testing应用程序的代码: #include <QLabel> #include <QVBoxLayout> #include <QNearFieldManager> #include <QNearFieldTarget> #include <QDebug> #include "window.h" Window::Window(QWidget *parent) : QWidget(parent) { nfcLabel_ = new QLabel(this); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(nfcLabel_, 1); setLayout(mainLayout); setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); setWindowTitle(tr("NFC Test")); nfc_ = new QNearFieldManager(this); if (nfc_->isAvailable()) { nfcLabel_->setText("NFC available"); […]

编译一个相当简单的c ++ 11程序时,gcc和clang之间的不同结果

我试图了解在这个简单的C ++ 11程序的输出中由gcc和clang公开的不同行为是否是由于clang(Xcode 5.0.2,OS X 10.8.5)中的一个错误引起的。 代码如下: #include <iostream> int main() { int matrix[][3]{{1,2,3}, {4,5,6}, {7,8,9}}; auto dyn_matrix = new int[3][3]{{1,2,3}, {4,5,6}, {7,8,9}}; std::cout << matrix[0][1] << std::endl; std::cout << dyn_matrix[0][1] << std::endl; return 0; } 如图所示,我试图使用统一的初始化来初始化一个大小为3×3的匿名(名为)multidimensional array。 当用MacPorts编译gcc 4.7时,获得预期的输出: $g++-mp-4.7 -std=c++11 dyn_matrix.cpp -o dyn_matrix $ ./dyn_matrix 2 2 $ 相反,如果使用铛,输出读取: $ clang++ -std=c++11 -stdlib=libc++ […]

为什么在Herb Sutter的CppCon 2014演讲中不推荐使用setter成员函数(回到基础:现代C ++风格)?

在Herb Sutter's CppCon 2014的演讲中回到基础:现代C ++风格,他在幻灯片28( 这里是幻灯片的networking副本)中提到了这种模式: class employee { std::string name_; public: void set_name(std::string name) noexcept { name_ = std::move(name); } }; 他说这是有问题的,因为当用临时调用set_name()时,noexcept-ness不强(他使用短语“noexcept-ish”)。 现在,我已经在我自己最近的C ++代码中大量使用了上面的模式,主要是因为它每次都省去了inputset_name()的两个副本 – 是的,我知道每次强制执行一个复制构造可能会有点低效,但是,嘿,我是一个懒惰的typer。 然而草药的短语“这noexcept是有问题的 ”担心我,因为我没有在这里得到问题:std :: string的移动赋值运算符是noexcept,因为它的析构函数,所以上面set_name()似乎是保证noexcept。 在编译参数之前,我确实看到了编译器在 set_name() 之前抛出的一个潜在的exception,但是我很努力地认为这是个问题。 后来在幻灯片32草药明确指出,上述是一个反模式。 有人能向我解释为什么为什么我一直懒惰地写错代码?

Decimal.One,Decimal.Zero,Decimal.MinusOne在.Net中的用途是什么?

简单的问题 – 为什么Decimaltypes定义这些常量? 何必? 我正在寻找为什么这是由语言定义的原因,而不是对编译器的可能用途或影响。 为什么把这个放在那里呢? 编译器可以像Decimal.Zero一样轻松地在线编译0m,所以我不会将其作为编译器快捷方式购买。

BootstrapperPackage在* .csproj项目中意味着什么

我正在将大量的C#项目从vs.net 2008升级到vs.net 2010 rc。 我注意到升级在* .csproj文件(包括Microsoft.NET.Framework.3.5和3.5sp1)内创build了BootstrapperPackage部分。 我想知道BootstrapperPackage是做什么的,我需要它们吗?

从lambdainheritance是什么意思?

发现这个代码看起来很有趣: auto a = [](){}; class B : decltype(a) { }; 我想知道它做了什么。 这可以用任何方式吗?

C ++ 11 std :: set lambda比较函数

我想用自定义比较函数创build一个std::set 。 我可以将它定义为一个带有operator()的类,但我希望能够定义一个lambda函数,因此我决定在类的构造函数的初始化列表中定义lambda函数,该类的std::set成员。 但是我不能得到lambda的types。 在我继续之前,这里是一个例子: class Foo { private: std::set<int, /*???*/> numbers; public: Foo () : numbers ([](int x, int y) { return x < y; }) { } }; 我search后发现两个解决scheme:一个,使用std::function 。 只要设置比较函数types为std::function<bool (int, int)>并像我一样传递lambda。 第二个解决scheme是写一个make_set函数,就像std::make_pair 。 解决scheme1: class Foo { private: std::set<int, std::function<bool (int, int)> numbers; public: Foo () : numbers ([](int x, int […]