相关疑难解决方法(0)

C#Dictionary中的KeyNotFoundException在根据内容更改属性值后,计算GetHashCode.为什么?

请参阅下面的代码.

            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<TestClass>();
                foreach(var kv in dict) {
    // Swap property values for each Key
    // For example Key with property value 1 will become 6
    // and 6 will become 1
                    kv.Key.MyProperty = 6 - kv.Key.MyProperty + 1;

    // Add the Key to the List
                    list.Add(kv.Key);
                }

// Try to print dictionary …
Run Code Online (Sandbox Code Playgroud)

c# hash dictionary

2
推荐指数
1
解决办法
257
查看次数

是否存在指定的(子)索引分隔符?

背景

在 PowerShell 中构建哈希表以通过特定属性快速访问对象是很常见的,例如基于以下内容建立索引LastName

$List =  ConvertFrom-Csv @'
Id, LastName, FirstName, Country
 1, Aerts,    Ronald,    Belgium
 2, Berg,     Ashly,     Germany
 3, Cook,     James,     England
 4, Duval,    Frank,     France
 5, Lyberg,   Ash,       England
 6, Fischer,  Adam,      Germany
'@

$Index = @{}
$List |ForEach-Object { $Index[$_.LastName] = $_ }

$Index.Cook

Id LastName FirstName Country
-- -------- --------- -------
3  Cook     James     England
Run Code Online (Sandbox Code Playgroud)

在某些情况下,需要在两个(甚至更多)属性上构建索引,例如 theFirstName和 the LastName。为此,您可以创建一个多维密钥,例如:

$Index = @{}
$List |ForEach-Object {
     $Index[$_.FirstName] = @{} …
Run Code Online (Sandbox Code Playgroud)

.net indexing powershell hashtable

2
推荐指数
1
解决办法
291
查看次数

使用哈希码检测List <string>的元素是否已更改C#的示例

我有一个List,它根据一些XML元素的Linq查询每分钟更新一次.

xml会不时发生变化.有人建议我可以使用Hashcode来确定列表中的任何字符串是否已更改.

我已经看到了一些Md5哈希码计算的例子只是一个字符串,但不是列表...有人能告诉我一个用列表做这个的方法吗?

我试过像int test = list1.GetHashCode这样简单的东西; 但无论列表中的内容如何,​​代码都是相同的......

这是带有链接查询的整个方法,最后是所有..note SequenceEqual:

        private void GetTrackInfo()
    {
        _currentTitles1.Clear();
        var savedxmltracks = new XDocument();

        listBox1.Items.Clear();
        WebClient webClient = new WebClient();

        XmlDocument xmltracks = new XmlDataDocument();
        try
        {
            xmltracks.Load(_NPUrl);
            xmltracks.Save("xmltracks.xml");
        }
        catch (WebException ex)
        {
            StatusLabel1.Text = ex.Message;
        }

        try
        {
             savedxmltracks = XDocument.Load("xmltracks.xml");
        }
        catch (Exception ex)
        {
            StatusLabel1.Text = ex.Message;
        }


        var dateQuery = from c in savedxmltracks.Descendants("content")
                           select c;

        _count = savedxmltracks.Element("content").Element("collection").Attribute("count").Value;

        var tracksQuery1 = from c in savedxmltracks.Descendants("data")
                           select new
                           { …
Run Code Online (Sandbox Code Playgroud)

.net c# md5 hashcode generic-list

1
推荐指数
1
解决办法
2433
查看次数

在==运算符覆盖中使用GetHashCode

只是想知道我在标题中提到的是一个好习惯.这对我来说很有意义,我们重写GetHashCode以返回一个基于两个属性的值,如果匹配,则应将两个对象视为相等.逻辑似乎很好,代码可以工作,但我不知道它是否会导致其他问题.

这是使用GetHashCode:

public static bool operator ==(CartesianCoordinates a, CartesianCoordinates b)
{
    return a.GetHashCode() == b.GetHashCode(); // Using GetHashCode here
}

public static bool operator !=(CartesianCoordinates a, CartesianCoordinates b)
{
    return !(a == b);
}

public override bool Equals(object obj)
{
    return this == (CartesianCoordinates)obj; // This just uses the == override
}

public override int GetHashCode()
{
    return (this.X + this.Y.ToLower()).GetHashCode(); // GetHashCode hashes the two properties we care about
}
Run Code Online (Sandbox Code Playgroud)

这就是我以前的方式:

public static bool operator ==(CartesianCoordinates a, CartesianCoordinates b) …
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
390
查看次数

C#包含元组上的密钥

我有一个字典,它接受一个元组函数和一个int

Dictionary<Tuple<string,string>, int> fullNames = new Dictionary<Tuple<string,string>, int>();
Run Code Online (Sandbox Code Playgroud)

将Tuple类定义为

public class Tuple<T, T2> 
{ 
    public Tuple(T first, T2 second) 
    { 
        First = first; 
        Second = second; 
    } 
    public T First { get; set; } 
    public T2 Second { get; set; } 

}
Run Code Online (Sandbox Code Playgroud)

我想这样使用Containskey函数

if (fullNames.ContainsKey(Tuple<"firstname","lastname">))
Run Code Online (Sandbox Code Playgroud)

但我收到过载错误.有什么建议?

c# dictionary class

1
推荐指数
1
解决办法
4607
查看次数

制作多个字符串的哈希键的最快方法

历史原因很长,但问题很简单。有 3 个字符串,我需要缓存匹配值。为了获得快速缓存,我使用以下代码:

public int keygen(string a, string b, string c)
    {
        var x = a + "@@" + b + "@@" + c;
        var hash = x.GetHashCode();
        return hash;
    }
Run Code Online (Sandbox Code Playgroud)

(请注意,字符串a, b,c不包含代码"@@")它本身的缓存只是一个Dictionary<int, object>

我知道存在散列键可能不唯一的风险,但除此之外:

有谁知道制作 int 键的更快方法吗?(在 C# 中)此操作大约占用总 CPU 时间的 15%,并且这是一个长时间运行的应用程序。

我尝试了几种实现,但未能找到更快的实现。

c# performance

1
推荐指数
1
解决办法
1万
查看次数

SortedSet <>.包含()如何实现自己的比较?

我想检查具有给定值的Object是否存在,SortedSet<>但我不明白自定义比较在这里是如何工作的.在List<>.Exists()我可以只使用lambda,但我不能那样做,我没有得到整个界面的东西,而msdn说我需要覆盖int返回功能.

public class Node
{
    public int X, Y;
    public int rand;

    public Node(int x, int y, int r)
    { X = x; Y = y; rand = r; }
}

class Program
{
    static void Main(string[] args)
    {
        SortedSet<Node> mySet = new SortedSet<Node>();
        mySet.Add(new Node(1, 2, 90));
        Node myNode = new Node(1, 2, 50);
        // I want this to check if X and Y are the same
        if (mySet.Contains(myNode, interfaceThing))
            Console.WriteLine("Sth is already …
Run Code Online (Sandbox Code Playgroud)

c# sortedset

1
推荐指数
1
解决办法
1807
查看次数

使用LINQ GroupBy获取忽略属性的唯一集合

随着收藏的Rules我试图创建的另一个集合Rules忽略了Site财产,创造一个独特的名单.

public class Rule
{
    public int TestId { get; set; }
    public string File { get; set; }
    public string Site { get; set; }
    public string[] Columns { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我的收藏品具有如下值:

var rules = new List<Rule>
{
    new Rule { TestId = 1, File = "Foo", Site = "SiteA", Columns = new string[] { "ColA", "ColB" }},
    new Rule { TestId = 1, File = "Foo", Site = "SiteB", Columns …
Run Code Online (Sandbox Code Playgroud)

c# linq

1
推荐指数
1
解决办法
77
查看次数

如何使用Linq通过它的相等性在C#中对象进行分组

场景:

我有对象的名单" Order并想通过组相同的List<OrderLine>属性,用相同的我的意思是在同一个订单行的数量相同,以及相同的SKU/Quantity值",并返回分组顺序值的列表:

class Order
{
    public int OrderNumber { get; set; }
    public List<OrderLine> Lines { get; set; }
}

class OrderLine
{    
    public string Sku { get; set; }
    public int Quantity { get; set; }       
}
Run Code Online (Sandbox Code Playgroud)

输入样本:

+-------------+-----+----------+
| OrderNumber | Sku | Quantity |
+-------------+-----+----------+
|           1 | A   |       10 |
|           1 | B   |       20 |
|           2 | A   |       10 |
|           3 | A   |       10 | …
Run Code Online (Sandbox Code Playgroud)

c# linq

1
推荐指数
1
解决办法
169
查看次数

GetHashCode等于C#中类的实现

我有一个类Person,我必须覆盖它的Equals和GetHashCode方法.如果名称匹配,则两个人对象等于电子邮件匹配.使用相当高效的哈希函数,这样做的好方法是什么?

class Person
{
    string Name
    string Email

    public override Equals(object obj)
    {
        if (ReferenceEquals(obj, null))
            return false;
        if (ReferenceEquals(this, obj))
            return true;
        if (obj is Person)
        {
            Person person = (Person)obj;
            return
                (this.Name == person.Name)
                || (this.Email == person.Email);
        }
        return false;
    }

    public override GetHashCode()
    {
        // What's a good way to implement?
    }
}
Run Code Online (Sandbox Code Playgroud)

c# equals gethashcode

0
推荐指数
2
解决办法
616
查看次数