相关疑难解决方法(0)

未定义或导入预定义类型'System.ValueTuple'2'

我安装了Visual Studio 15 Preview 3并尝试使用新的元组功能

static void Main(string[] args)
{
    var x = DoSomething();
    Console.WriteLine(x.x);
}

static (int x, int y) DoSomething()
{
    return (1, 2);
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,我收到错误:

未定义或导入预定义类型'System.ValueTuple'2'

根据博客文章,这个功能默认情况下应该"打开".

我做错了什么?

c# c#-7.0 visual-studio-2017

362
推荐指数
4
解决办法
9万
查看次数

c#中的多键字典?

我知道BCL中没有一个,但有人能指出我一个好的开源吗?

By Multi我指的是2把钥匙.;-)

c# dictionary

112
推荐指数
10
解决办法
15万
查看次数

Nullable struct vs class

我有一个包含两个字段的简单结构; 一个存储一个对象,另一个存储DateTime.我这样做是因为我想在Dictionary中存储对象,但也有DateTime标记.

我有一个返回我的结构的方法,我现在已经确定该方法也应该能够返回null,所以我使我的结构可以为空.我现在想知道我是否应该让我的结构成为一个类,所以它是一个引用类型?

.net c#

13
推荐指数
2
解决办法
4010
查看次数

new KeyValuePair <UInt32,UInt32>(i,j).GetHashCode(); 高重复率

为了寻找词典的快速复合键,我遇到异常,我无法理解也无法证明.

在有限的测试中

Dictionary<KeyValuePair<UInt32, UInt32>, string>
Run Code Online (Sandbox Code Playgroud)

明显慢于(200:1)

Dictionary<KeyValuePair<UInt16, UInt16>, string>
Run Code Online (Sandbox Code Playgroud)

测试两个循环,从0到1000 Populate,然后包含ContainsKey

         Poplulate     ContainsKey  
UInt32    92085         86578  
UInt16     2201           431
Run Code Online (Sandbox Code Playgroud)

问题是

new KeyValuePair<UInt32, UInt32>(i, j).GetHashCode();
Run Code Online (Sandbox Code Playgroud)

产生许多重复.
在循环i和j 1024中,仅创建1024个唯一散列值.

基于来自CasperOne的雪崩评论尝试了i*31和j*97(两个素数),这导致105280在1024X1024上独一无二.仍然有很多重复.CasperOne我知道这与随机不一样.但随机输入并不是我的工作.GetHashCode()应该随机化输出.

为什么重复次数很多?

相同的循环

new KeyValuePair<UInt16, UInt16>(i, j).GetHashCode();
Run Code Online (Sandbox Code Playgroud)

产生1024 X 1024唯一哈希码(完美).

Int32有同样的问题.

这些重复哈希值会终止

Dictionary<KeyValuePair<UInt32, UInt32>, string> 
Run Code Online (Sandbox Code Playgroud)

与Int16相比,元组还会生成很多重复项,在Int32中不会降级.

生成原始KVP和原始KPV.GetHashCode的时间类似.

与HashSet相同的异常.

Dictionary<KeyValuePair<UInt32, UInt32>, string> dKVPu32 = new Dictionary<KeyValuePair<UInt32, UInt32>, string>();
Dictionary<KeyValuePair<UInt16, UInt16>, string> dKVPu16 = new Dictionary<KeyValuePair<UInt16, UInt16>, string>();
KeyValuePair<UInt32, UInt32> kvpUint32;
KeyValuePair<UInt16, UInt16> kvpUint16;
int range = 1000;
Int32 hashCode;
HashSet<Int32> kvpUint32Hash = new HashSet<Int32>(); …
Run Code Online (Sandbox Code Playgroud)

.net dictionary gethashcode

13
推荐指数
2
解决办法
3140
查看次数

C#中多个值字典的一个关键点?

我经常需要一个键到多个vaules字典,但在C#中,大多数都是像Dictionary和Hashtable这样的两个维度.

我想要这样的东西:

var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
Run Code Online (Sandbox Code Playgroud)

dt inside <>表示数据类型.有人有这方面的想法吗?

c#

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

标签 统计

c# ×4

.net ×2

dictionary ×2

c#-7.0 ×1

gethashcode ×1

visual-studio-2017 ×1