相关疑难解决方法(0)

在字典中使用byte []作为键

我需要byte[]在a中使用a 作为键Dictionary.由于byte[]不会覆盖默认GetHashCode方法,byte[]因此包含相同数据的两个单独对象将在字典中使用两个单独的插槽.基本上我想要的是这个:

Dictionary<byte[], string> dict = new Dictionary<byte[], string>();
dict[new byte[] {1,2,3}] = "my string";
string str = dict[new byte[] {1,2,3}];
// I'd like str to be set to "my string" at this point
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?我唯一能想到的就是构建一个包装类,它只包含一个基于内容的byte[]覆盖,但这似乎容易出错.GetHashCodebyte[]

c#

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

元组vs字符串作为C#中的字典键

我有一个使用ConcurrentDictionary实现的缓存,我需要保留的数据取决于5个参数.所以从缓存中获取它的方法是:(为简单起见,这里只显示3个参数,我更改了数据类型以表示CarData的清晰度)

public CarData GetCarData(string carModel, string engineType, int year);
Run Code Online (Sandbox Code Playgroud)

我想知道在我的ConcurrentDictionary中使用哪种类型的密钥会更好,我可以这样做:

var carCache = new ConcurrentDictionary<string, CarData>();
// check for car key
bool exists = carCache.ContainsKey(string.Format("{0}_{1}_{2}", carModel, engineType, year);
Run Code Online (Sandbox Code Playgroud)

或者像这样:

var carCache = new ConcurrentDictionary<Tuple<string, string, int>, CarData>();
// check for car key
bool exists = carCache.ContainsKey(new Tuple(carModel, engineType, year));
Run Code Online (Sandbox Code Playgroud)

我不会将这些参数与其他任何地方一起使用,因此没有理由创建一个类来保持它们在一起.

我想知道哪种方法在性能和可维护性方面更好.

.net c# caching equality concurrentdictionary

27
推荐指数
4
解决办法
7912
查看次数

IStructuralEquatable vs Equals?

根据msdn

IStructuralEquatable

定义支持结构对等比较的方法.结构相等意味着两个对象是相等的,因为它们具有相等的值.它与引用相等不同,后者表示两个对象引用相同,因为它们引用相同的物理对象.

不是它什么Equals应该怎么做?(当覆盖时IEquatable)?

c# equals .net-4.0

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

C#字节数组比较

我使用.NET 3.0在C#中有两个字节数组.

比较两个字节数组是否包含每个元素的相同内容的"最有效"方法是什么?

例如,字节数组{0x1, 0x2}{0x1, 0x2}.但字节数组{0x1, 0x2}和字节数组{0x2, 0x1}不一样.

.net c# bytearray

14
推荐指数
3
解决办法
2万
查看次数

.NET可以测试数组的等价性而不仅仅是相等的引用吗?

var a = new double[] {1, 2, 3};
var b = new double[] {1, 2, 3};
System.Console.WriteLine(Equals(a, b)); // Returns false
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找一种比较数组的方法,它可以比较内部值而不是参考值.是否有内置的方法在.NET中执行此操作?

此外,虽然我理解Equals比较引用,但也GetHashCode返回这两个数组的不同值,我觉得不应该发生,因为它们具有相同的内部值.

.net arrays equals

6
推荐指数
2
解决办法
600
查看次数