目前我对哈希集有一个问题。我的类是不可变的,并且只包含一项,当我将两个具有相同数据的不同类添加到一个哈希集时,我会将它们都放在集合中。这很奇怪,因为我在基类和超类上都重载了Equals和GetHashCode。
public abstract class Contact :IEquatable<Contact>
{
public readonly BigInteger Id;
public Contact(BigInteger id) { this.Id = id; }
public abstract bool Equals(Contact other)
我在字典中使用RTBTextPointer作为自定义密钥.
Init.SpintaxEditorPropertyMain.SpintaxListDict = new Dictionary<RTBTextPointer, SpintaxEditorProperties.SpintaxMappedValue>(new RTBTextPointerComparer());
我在类库中使用这个RTBTextPointer和RTBTextPointerComparer类,并在不同的wpf项目中使用它,
if (Init.SpintaxEditorPropertyMain.Spinta
我有一个对象列表,如下所示
public class Person
{
public string Name {get; set;}
public int Age {get; set;}
}
public class SomeClass
{
public int DoSomething ()
{
int result;
List<Person> personList = new List<Person>();
personList.Add(new Person { //with 1 object, just to keep simpl
我看到了这里提出的问题:,但我的c#没有那么强大,而且我对IEquatable不够友好,如果可能的话,我希望在VB.NET中看到这一点。
我的示例代码(当我到达那里时,该类最终将使用INotifyPropertyChanged ):
Public Class Car
Implements ICloneable
Implements IEquatable(Of Car)
Public Property Make() As String
Get
Return m_Make
End Get
Set(ByVal value As String)
我有我的自定义类的HashSet:
public class Vertex
{
public string Name;
public override bool Equals(object obj)
{
var vert = obj as Vertex;
if (vert !=null)
{
return Name.Equals(vert.Name, StringComparison.InvariantCulture);
}
return false;
}
在使用字典时,我总是覆盖GetHashCode和Equals (或者为字典提供自定义比较器)。
当我创建一个匿名类作为键时,幕后会发生什么?
示例代码...
var groups=(from item in items
group item by new { item.ClientId, item.CustodianId, item.CurrencyId }
into g
select new {
Key=g.Key,
我有一个实现IEquatable<T>的类,这样当我进行测试时,我可以使用如下调用轻松地比较这些对象的IEnumerable集合:
Assert.IsTrue(expected.SequenceEqual(actual));
这个类看起来像这样:
public class ThirdPartyClaim : IEquatable<ThirdPartyClaim>
{
// fields removed for question
public bool Equals(ThirdPartyClaim compareTo)
{
if
我想使用Dictionary(键、值),键不是基类型,而是如下所示的类:
Public Class MyKey
Sub New(ByVal packet As String, ByVal sent As Boolean)
Me.packet = packet.ToUpper.Trim
Me.sent = sent
End Sub
Private packet As String
Private sent As Boolean
End Class
现在,为了让字典工作并找到键,我必须在Key类中实现System.IEquatab
我有以下简单的LINQ to Object查询:
var accountsWithOpportunities = (from a in accountGetServices
join o in opportunities on a equals o.Account
select a).ToList();
此查询始终为0结果,但此查询不会:
var accountsWithOpportunities = (from a in accountGetServices
我读到过,当你覆盖一个类/对象上的Equals时,你需要覆盖GetHashCode。
public class Person : IEquatable<Person>
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Person(int personId, string firstName, string lastName
if (Process.Equals(Process.GetCurrentProcess(), Process.GetCurrentProcess()))
Console.WriteLine("i am the same as my self");
else
Console.WriteLine("i am not the same as my self");
Console.ReadKey();
上面印着“我和我自己不一样”
有什么问题吗?
我如何使用Equals(Object a,
删除%2列表中的重复对象时出现问题
public class Pump
{
public int PumpID { get; set; }
public string PumpName { get; set; }
public string LogicalNumber { get; set; }
}
public void LoadPump()
{
var pumps = _pumpRepository.GetAll(); // 2 Pump
var pumpsActive = _pumpRepository.GetAllActive(); // 1
我有下面的课程
class Product : IEquatable<Product>
{
public Guid Id { get; set; }
public bool Equals(Product other)
{
return Id.Equals(other.Id);
}
}
如果我尝试创建一个列表项目的唯一列表,如下所示
Guid a = Guid.NewGuid();
List<Product> listA = new List<Product>();
我在从子集合中删除对象时遇到了问题。我有一个带有子对象集合的父类。
public class Document
{
public Document()
{
Pages = new List<DocumentPage>();
}
public virtual Int64 Id { get; set; }
public virtual IList<DocumentPage> Pages { get; set; }
}
public class DocumentPage
{
public virtual Int64 I
我有以下类:
public class SupplierCategory : IEquatable<SupplierCategory>
{
public string Name { get; set; }
public string Parent { get; set; }
#region IEquatable<SupplierCategory> Members
public bool Equals(SupplierCategory other)
{
return this.Name == other.Name
我的代码是这样的:
public bool AreSame(CreditProposal creditProposal)
{
if (!ContractingParty.Equals(creditProposal.ContractingParty))
return false;
if (!UltimateParent.Equals(creditProposal.UltimateParent))
return false;
if (!Rebound.Equals(creditProposal
可能重复:
我在Object Model中查看了下面的类,无法理解在Class中添加GetHashCode()的重要性。
样本类
public class SampleClass
{
public int ID { get; set; }
public String Name { get; set; }
public String SSN_Number { get; set; }
public override bool Equals(Object obj)
{
if (obj == null || GetType() != o
我目前正在尝试使用containskey方法来检查我的字典中是否包含某个自定义类型的键。要做到这一点,我应该重写我拥有的gethashcode函数,但是containskey方法仍然不起作用。肯定有什么地方我做得不对,但我还没有弄清楚在过去的5个小时里我到底在尝试什么:
public class Parameter : IEquatable<Parameter>
{
public string Field { get; set; }
public string Content { get; set; }
public bool Equals(Paramet
我是单元测试的新手,所以我可能做错了什么。
我有一些XmlResult类:
public class XmlResult : ActionResult
{
public XmlDocument Document { private get; set; }
public override void ExecuteResult(ControllerContext context)
{
//Do something
}
}
我还有一个控制器扩展方法:
public static class Co
我知道当我创建一个以自定义类为键的字典时,当我提供一个键时,匹配是通过引用比较来完成的。例如:
public class SomeClass
{
public object SomeValue { get; set; }
}
// ....
public static void Main()
{
var dict = new Dictionary<SomeClass, string>();
var key1 = new SomeClass { SomeValue = 30 };
dict[key1] = "30";
Co
假设我有一个名为MyClass的类,它有两个属性(int Id和一个字符串名)。我想从另一个集合中填充这些MyClass对象的列表,但我只想要唯一的对象。另一个集合是第三方对象,它有一个名为'Properties‘的属性,它只是一个值数组,前两个值对应于我关心的Id和Name值。此集合中可以有重复项,因此我只需要唯一的项。
这看起来应该能起到作用,但它没有,它返回所有的项目,而不管是什么副本。我在这里做错了什么?
List<MyClass> items = (from MyClass mc in collectionOfProps
select new MyClass()
请看下面的代码。
static void Main(string[] args)
{
// Create Dictionary
var dict = new Dictionary<TestClass, ValueClass>();
// Add data to dictionary
CreateSomeData(dict);
// Create a List
var list = new List<Tes
我希望使类X的每个实例都具有唯一的ID。
我使用的是一个递增的数字:
class X {
private int id;
private static int instanceCounter = 0;
public X() {
id = Interlocked.Increment(ref instanceCounter);
}
//...
}
这些对象也被用作字典中的键,所以我想我可以从id返回GetHashCode()。
public override int GetHashCode() {
return i
我试着编写了一个增量源代码生成器;它正在生成正确的源代码,但它并不是在增量地这样做。我觉得我的Initialize方法有问题,或者我的自定义返回类型(ClassInfo)不适合缓存。我也从来没有写过IEquatable,所以我真的认为它与此有关。
ClassInfo
public readonly struct ClassInfo : IEquatable<ClassInfo>
{
public readonly string? Namespace { get; }
public readonly string Name { get; }
public reado