gpt4 book ai didi

c# - 为什么 IntelliSense 认为我字典中的值是动态的?

转载 作者:行者123 更新时间:2023-11-30 19:23:47 24 4
gpt4 key购买 nike

假设我有以下方法:

private void something()
{
string text = "This is obviously a string";
dynamic pietje = Guid.NewGuid();

var dict = new Dictionary<Guid, string>();
dict.Add(pietje, text);

var someText = dict[pietje];
}

下图显示 IntelliSense 仍然认为它是动态的,尽管我看不出这可能是字符串(或空值)以外的任何东西
enter image description here

我是否遗漏了一个设置或者是否有什么东西阻止 IntelliSense 知道 someText 应该是一个字符串?我可能过于依赖 IntelliSense,但对于某些对象来说,手动正确键入整个方法或属性名称变得非常困难。

那么这是什么原因呢?我能做些什么来解决这个问题吗?

显然我可以通过多种方式修复它:

string someText = dict[pietje];
var someText = dict[(Guid)pietje];
var someText = dict[pietje] as string;

等但这不是重点,也不是我想要的。

最佳答案

这个问题在很多情况下都会出现。 SO中的经典问题:

public string Foo(string fooable) { .... }

dynamic fooable = "whatever";
var whyAmIDynamic = Foo(fooable);

嗯?为什么是wyAmIDynamic dynamic ?!?编译器应该知道 wyAmIDynamicstring ,不应该吗?

是的,但后来有人出现并写下了以下内容:

public int Foo(int fooable) { .... } //a new overload of Foo

现在,应该怎么办Foo(fooable)返回? dynamic似乎是唯一合理的选择;涉及 dynamic 的方法调用直到运行时才能解决参数。

在您的特定情况下,编译器没有理由不相信有人可能会出现并对 Dictionary<TKey, TValue> 实现以下荒谬的重载:

public int this[string key] { ... }

这种重载有意义吗?不。编译器的工作是弄清楚它是否有意义吗?不,它合法吗?是的,因此索引器返回 dynamic变量。

关于c# - 为什么 IntelliSense 认为我字典中的值是动态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45008627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com