Tag: C#的

.NET中的IEqualityComparer <T>中GetHashCode的作用是什么?

我想了解接口IEqualityComparer的GetHashCode方法的作用。 以下示例来自MSDN: using System; using System.Collections.Generic; class Example { static void Main() { try { BoxEqualityComparer boxEqC = new BoxEqualityComparer(); Dictionary<Box, String> boxes = new Dictionary<Box, string>(boxEqC); Box redBox = new Box(4, 3, 4); Box blueBox = new Box(4, 3, 4); boxes.Add(redBox, "red"); boxes.Add(blueBox, "blue"); Console.WriteLine(redBox.GetHashCode()); Console.WriteLine(blueBox.GetHashCode()); } catch (ArgumentException argEx) { Console.WriteLine(argEx.Message); } } […]

Moq:如何获取传递给模拟服务方法的参数

想象一下这个class级 public class Foo { private Handler _h; public Foo(Handler h) { _h = h; } public void Bar(int i) { _h.AsyncHandle(CalcOn(i)); } private SomeResponse CalcOn(int i) { …; } } Mo(q)cking处理程序在Foo的testing中,我将如何检查Bar()传递给_h.AsyncHandle ?

在一个类中声明一个枚举

在下面的代码片段中, Color枚举是在Car类中声明的,以限制枚举的范围,并尽量不“污染”全局名称空间。 class Car { public: enum Color { RED, BLUE, WHITE }; void SetColor( Car::Color color ) { _color = color; } Car::Color GetColor() const { return _color; } private: Car::Color _color; }; (1)这是限制Color枚举范围的好方法吗? 或者,我应该声明它在Car类之外,但可能在它自己的命名空间或结构? 我今天刚刚遇到这篇文章,主张后者,并讨论关于枚举的一些好的观点: http : //gamesfromwithin.com/stupid-c-tr​​icks-2-better-enums 。 (2)在这个例子中,当在类中工作时,最好将枚举编码为Car::Color ,还是只需要Color就足够了? (我认为前者更好,以防万一在全局命名空间中声明另一个Color枚举。那么,至less我们明确指出了我们所指的枚举。)

通过C#中的对象属性循环

我有两个相同types的对象,我想遍历每个对象的公共属性,并提醒用户哪些属性不匹配。 是否有可能做到这一点,而不知道对象包含什么属性? 谢谢

AsNoTracking()做了什么差别?

我有一个关于.AsNoTracking()扩展的问题,因为这是非常新的和相当混乱的。 我正在使用每个请求上下文的网站。 很多我的实体不会改变,所以不需要被跟踪,但是我有以下情况,我不确定数据库是什么,甚至是否在这种情况下有所作为。 这个例子就是我现在正在做的事情: context.Set<User>().AsNoTracking() // Step 1) Get user context.Set<User>() // Step 2) Update user 这与上面的一样,但从步骤1中删除.AsNoTracking() : context.Set<User>(); // Step 1) Get user context.Set<User>() // Step 2) Update user 步骤1和2使用相同的上下文,但发生在不同的时间。 我不能解决的是是否有任何区别。 由于第2步是更新,我猜两者无论如何都会触发数据库两次。 谁能告诉我有什么不同?

私人纯虚函数的意义何在?

我在头文件中遇到以下代码: class Engine { public: void SetState( int var, bool val ); { SetStateBool( int var, bool val ); } void SetState( int var, int val ); { SetStateInt( int var, int val ); } private: virtual void SetStateBool(int var, bool val ) = 0; virtual void SetStateInt(int var, int val ) = 0; }; […]

提交button的MVC已被按下

我在我的MVC表单上有两个button: <input name="submit" type="submit" id="submit" value="Save" /> <input name="process" type="submit" id="process" value="Process" /> 从我的控制器动作,我怎么知道哪一个被按下?

为什么不能在“最后”的块中join“继续”的声明呢?

我没有问题; 我只是好奇。 想象一下下面的场景: foreach (var foo in list) { try { //Some code } catch (Exception) { //Some more code } finally { continue; } } 这将不会编译,因为它会引发编译器错误CS0157 : 控制不能离开最后条款的主体 为什么?

初始化一个字节数组到一个特定的值,而不是默认的空值?

我忙于用C ++重写一个旧的项目,C#。 我的任务是重写程序,使其function尽可能接近原始。 在一堆文件处理过程中,编写这个程序的以前的开发人员创build了一个包含大量字段的结构,这些字段对应于文件必须写入的设置格式,所以所有这些工作已经完成了。 这些字段都是字节数组。 C ++代码然后使用memset将整个结构设置为所有空格字符( 0x20 )。 一行代码。 简单。 这是非常重要的,因为该文件最终要使用的实用程序正在期待这种格式的文件。 我所要做的就是把这个结构体改为C#中的一个类,但是我找不到一种方法来简单地将这些字节数组初始化为所有的空格字符。 我最终要做的是在类的构造函数中: //Initialize all of the variables to spaces. int index = 0; foreach (byte b in UserCode) { UserCode[index] = 0x20; index++; } 这工作正常,但我确定必须有一个更简单的方法来做到这一点。 在构造函数中将数组设置为UserCode = new byte[6] ,字节数组会自动初始化为默认的空值。 难道我没有办法使它成为声明中的所有空间,所以当我打电话给我的类的构造函数,它是这样直接初始化? 或者一些memset的函数?

将string数组转换为List <string>

我已经看到使用数组types的.ToList()完成的例子,这似乎只能在.net 3.5 +中使用 。 我正在.NET Framework 2.0上处理目前无法升级的ASP.NET项目,所以我想知道:还有其他解决scheme吗? 比在数组中循环并将每个元素添加到此列表更优雅(这不是问题;我只是想知道是否有更好的解决scheme用于学习目的)? string[] arr = { "Alpha", "Beta", "Gamma" }; List<string> openItems = new List<string>(); foreach (string arrItem in arr) { openItems.Add(arrItem); } 如果我必须这样做,是否有一种方法可以在将内容复制到列表中后,从内存中取消分配数据?