Tag: 比较

使用Assert.AreEqual()比较两个对象

我是第一次在visual studio中编写测试用例c#我有一个方法返回一个对象列表,我想通过使用Assert.AreEqual()方法将它与另一个对象列表进行比较。 我试过这样做,但即使两个对象相同,断言也会失败。 我想知道这个方法,这两个参数是比较引用还是对象的内容, 我是否必须重载==运算符才能使其工作?

C# – IComparer – 如果datetime为null,则应排序到底部而不是顶部

我有一个日期列表,我想按升序排序。 但是,默认比较器意味着我有: null null 18/01/2011 23/01/2011 有人可以帮助IComparer,这意味着按升序排序的日期将如下所示: 18/01/2011 23/01/2011 null null 谢谢,大卫

比较对象的不同实现的优点/缺点

这个问题涉及基本相同代码的2种不同实现。 首先,使用委托创建一个比较方法,该方法可以在排序对象集合时用作参数: class Foo { public static Comparison BarComparison = delegate(Foo foo1, Foo foo2) { return foo1.Bar.CompareTo(foo2.Bar); }; } 当我想要一种以与CompareTo函数提供的方式不同的方式对Foo对象集合进行排序时,我使用上述方法。 例如: List fooList = new List(); fooList.Sort(BarComparison); 二,使用IComparer: public class BarComparer : IComparer { public int Compare(Foo foo1, Foo foo2) { return foo1.Bar.CompareTo(foo2.Bar); } } 当我想在Foo对象的集合中对Foo对象进行二进制搜索时,我使用上面的代码。 例如: BarComparer comparer = new BarComparer(); List fooList = […]

EqualityComparer 。默认与T.Equals

假设我有一个通用的MyClass需要比较两个类型的对象。 通常我会做…… void DoSomething(T o1, T o2) { if(o1.Equals(o2)) { … } } 现在假设我的MyClass有一个支持传递自定义IEqualityComparer的构造函数,类似于Dictionary 。 在那种情况下,我需要做…… private IEqualityComparer _comparer; public MyClass() {} public MyClass(IEqualityComparer comparer) { _comparer = comparer; } void DoSomething(T o1, T o2) { if((_comparer != null && _comparer.Equals(o1, o2)) || (o1.Equals(o2))) { … } } 要删除这个冗长的if语句,如果使用常规构造函数,我可以将_comparer默认为’default _comparer ‘。 我搜索了类似typeof(T).GetDefaultComparer()但却无法找到类似的东西。 我确实找到了EqualityComparer.Default ,我可以使用吗? 然后这个片段…… […]

确定两个List 对象是否包含相同的值集,即使它们的顺序不同,最好的方法是什么?

我有两个List对象(其中T对于两个对象都是相同的类型),我需要能够确定它们是否包含相同的值集,即使值不是相同的顺序。 对象是否有任何内置机制来完成此任务,或者我是否需要编写自己的算法? 或许,我应该使用不同类型的集合,而不是List ? 如果我要编写自己的算法,它可能包含以下步骤 – 如果我走这条路线,我会尝试在最终版本中优化它: 这两个集合是否包含相同数量的值? 如果没有返回false。 计算每个值在每个集合中出现的次数,如果计数不相等则返回false。 如果我到达两个集合的末尾而没有值计数的任何不等,则返回true。 我知道这有一些注意事项,比如T必须具有可比性 – 我现在使用默认比较(例如.Equals() ),并为generics类型定义了适当的约束。

C#对象比较

有人可以指出重载operator==的想法来执行深度对象比较(而不是参考比较)。 来自MSDN: 默认情况下,operator ==通过确定两个引用是否指示同一对象来测试引用相等性。 因此,引用类型不必实现operator ==以获得此function。 当一个类型是不可变的,也就是说,实例中包含的数据不能被改变,重载operator ==来比较值的相等而不是引用相等可能是有用的,因为作为不可变对象,它们可以被认为是相同的因为它们具有相同的价值。 在非不可变类型中覆盖operator ==不是一个好主意。 什么时候才真正受益? 并且,如果每个对象都有方法Equals ,这使得值比较成为可能,为什么有人会使用x == y语句执行值 (而不是引用)比较? 我想我不明白,因为这对我来说很奇怪。

与Properties.Resources.image的图像比较

你能告诉我为什么以下情况是假的吗? List SelectedImages = new List(); SelectedImages.Add(Properties.Resources.my_image); if (SelectedImages[0] == Properties.Resources.my_image) // false { … } 即使我写: SelectedImages[0] = Properties.Resources.my_image; if (SelectedImages[0] == Properties.Resources.my_image) // false { … } 我怎样才能进行这种比较?

比较两个类型为T的System.Enum

我现在非常接近了解Generics(我认为)。 但是,只是认为System.Enum不容易实现为generics类型。 我有这堂课: public class Button where TEnum : struct, IConvertible, IComparable, IFormattable { public TEnum Identifier { get; private set; //Set in the ctor } } 和 public abstract class AbstractInputDevice where TEnum : struct, IConvertible, IComparable, IFormattable { private List<Button> _buttons = new List<Button>(); public Button GetButton(TEnum Identifier){ foreach(Button button in _buttons){ if(button.Identifier […]

在c#字典中只查找或插入一个查找

我是一名前C ++ / STL程序员,试图使用c#/ .NET技术编写快速行进算法… 我正在搜索等效的STL方法“map :: insert”,如果不存在,则在给定键处插入值,否则返回现有键值对的迭代器。 我找到的唯一方法是使用两个查找:一个在TryGetValue中,另一个在Add方法中: List list; if (!_dictionary.TryGetValue (pcost, out list)) { list = new List (); dictionary.Add (pcost, list); } list.Add (new Point { X = nx, Y = ny }); 是否有一些东西可以解释为什么使用.NET容器不可能? 还是我错过了一些观点? 谢谢。

c#比较两个文本文件并生成一个带有差异的新文件

我正在寻找快速比较2个文本文件(+ -15000lines)的最佳方法,并获得两个文件中不同的输出字符串。 第一个是旧库存,新的是当前库存,我想生成第三个包含file2和file1之间不同的字符串。 (2个文件中有95%会相似)。