Tag: C#的

如何获取C#正则expression式中的捕获组的名称?

有没有办法获得在C#中捕获的组的名称? string line = "No.123456789 04/09/2009 999"; Regex regex = new Regex(@"(?<number>[\d]{9}) (?<date>[\d]{2}/[\d]{2}/[\d]{4}) (?<code>.*)"); GroupCollection groups = regex.Match(line).Groups; foreach (Group group in groups) { Console.WriteLine("Group: {0}, Value: {1}", ???, group.Value); } 我想得到这个结果: 小组:[我不知道该怎么走],价值:123456789 04/09/2009 999 组:数字,数值:123456789 组:date,值:04/09/2009 组:代码,值:999

吸气剂,制剂和性质的最佳实践。 Java与C#

我现在正在参加一个C#课程,我正试图找出最好的做法。 我来自Java背景,所以我只熟悉Java最佳实践; 我是C#新手! 在Java中,如果我有一个私有财产,我这样做; private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } 在C#中,我发现有很多方法可以做到这一点。 我可以像Java那样做: private string name; public void setName(string name) { this.name = name; } public string getName() { return this.name; } 或者我可以这样做: private string name; public string Name { get { return […]

使用IDisposable与C#中的析构函数有什么区别?

我什么时候在类上实现IDispose而不是析构函数? 我读了这篇文章 ,但我仍然没有理解这一点。 我的假设是,如果我在一个对象上实现IDispose,我可以显式地“销毁”它,而不是等待垃圾收集器去做。 它是否正确? 这是否意味着我应该总是明确地调用一个对象上的Dispose? 这是什么常见的例子?

获取可执行文件的path

我知道这个问题之前已经被问过,但是我还没有看到一个满意的答案,或者是一个明确的“不,这个不能做”,所以我会再问一次! 我所要做的就是以独立于平台的方式获取当前正在运行的可执行文件的path,无论是作为绝对path还是相对于可执行文件的调用位置。 我虽然boost :: filesystem :: initial_path是我的麻烦的答案,但似乎只处理问题的“平台无关”的一部分 – 它仍然返回的应用程序被调用的path。 对于一些背景,这是一个使用Ogre的游戏,我试图使用Very Sleepy进行configuration,它从自己的目录运行目标可执行文件,所以当然在加载游戏时发现没有configuration文件等,并及时崩溃。 我希望能够将它传递给configuration文件的绝对path,我知道它将永远与可执行文件一起生存。 在Visual Studio中debugging同样如此 – 我想能够运行$(TargetPath)而不必设置工作目录。

为什么这个调用默认的构造函数?

struct X { X() { std::cout << "X()\n"; } X(int) { std::cout << "X(int)\n"; } }; const int answer = 42; int main() { X(answer); } 我本来会期望这个打印 X(int) ,因为X(answer); 可以被解释为从int到X ,或者 一无所有,因为X(answer); 可以被解释为variables的声明。 但是, 它打印X() ,我不知道为什么X(answer); 会调用默认的构造函数。 奖励点:我需要改变什么才能获得临时而不是variables声明?

为JVM实现C#

有没有人试图为JVM实现C#? 作为一名Java开发人员,我一直嫉妒C#,但不愿意放弃JVM的可移植性和成熟性,更不用说为它提供各种各样的工具了。 我知道JVM和CLR之间有一些重要的区别,但是有没有什么是最好的?

C#SQL Server – 将列表传递给存储过程

我从我的C#代码调用SQL Server存储过程: using (SqlConnection conn = new SqlConnection(connstring)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("InsertQuerySPROC", conn)) { cmd.CommandType = CommandType.StoredProcedure; var STableParameter = cmd.Parameters.AddWithValue("@QueryTable", QueryTable); var NDistanceParameter = cmd.Parameters.AddWithValue("@NDistanceThreshold", NDistanceThreshold); var RDistanceParameter = cmd.Parameters.AddWithValue(@"RDistanceThreshold", RDistanceThreshold); STableParameter .SqlDbType = SqlDbType.Structured; NDistanceParameter.SqlDbType = SqlDbType.Int; RDistanceParameter.SqlDbType = SqlDbType.Int; // Execute the query SqlDataReader QueryReader = cmd.ExecuteReader(); 我存储的proc是相当标准的,但与QueryTable进行连接(因此需要使用存储过程)。 […]

什么是优先标志?

我只是想知道在g ++编译器中, -fpermissive标志是做什么的? 我正进入(状态: 错误:以临时地址[-fpermissive] 我可以通过给编译器提供-fpermissive标志来解决这个-fpermissive 。 编辑 :我刚刚发现是什么导致临时地址错误的一部分! 我现在要解决这个问题

为什么Math.pow(0,0)=== 1?

我们都知道0 0是不确定的。 但是 , JavaScript说: Math.pow(0, 0) === 1 // true 而C ++也是这样说的: pow(0, 0) == 1 // true 为什么? 我知道: >Math.pow(0.001, 0.001) 0.9931160484209338 但为什么Math.pow(0, 0)不会抛出任何错误? 或者,也许NaN会比1 。

枚举常量在C和C ++中performance不同

为什么这样做: #include <stdio.h> #include <limits.h> #include <inttypes.h> int main() { enum en_e { en_e_foo, en_e_bar = UINT64_MAX, }; enum en_e e = en_e_foo; printf("%zu\n", sizeof en_e_foo); printf("%zu\n", sizeof en_e_bar); printf("%zu\n", sizeof e); } 在C中打印4 8 8 ,在C ++中打印8 8 8 (在具有4字节整数的平台上)? 我的印象是, UINT64_MAX赋值将强制所有的枚举常量至less为64位,但是en_e_foo在普通的C中保持在32位。 这种差异的基本原理是什么?