var 关键字并不总是有效?

2023-11-27

C#,VS 2010。有人请解释一下为什么我不能使用var在我下面的代码中!

var props = TypeDescriptor.GetProperties(adapter);

// error CS1061: 'object' does not contain a definition for 'DisplayName'
foreach (var prop in props)
{
    string name = prop.DisplayName;
}

// No error
foreach (PropertyDescriptor prop in props)
{
    string name = prop.DisplayName;
}

TypeDescriptor.GetProperties返回一个PropertyDescriptorCollection与实例PropertyDescriptor。为什么编译器看不到这个?


TypeDescriptor.GetProperties返回一个只有一个类GetEnumerator返回非泛型的实现IEnumerator。其类型Current财产是object- 这是编译器可以推断的唯一类型,所以这就是你的类型prop变量将是。

第二foreach使用PropertyDescriptor代替var作为类型prop实际上执行了一个转换object to PropertyDescriptor.

假设这段代码:

PropertyDescriptor x = // get from somewhere;
object o = x;
PropertyDescriptor y = (PropertyDescriptor)o;

同样的情况也发生在第二个foreach循环每个项目。


你可以添加一个Cast<PropertyDescriptor>()得到一个通用的IEnumerable<T>与实施GetEnumerator返回IEnumerator<T>。如果您这样做,您可以使用var in the foreach loop:

var props = TypeDescriptor.GetProperties(adapter).Cast<PropertyDescriptor>();

// No error
foreach (var prop in props)
{
    string name = prop.DisplayName;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

var 关键字并不总是有效? 的相关文章

  • MongoDB C# 驱动程序检查身份验证状态和角色

    这是我使用 MongoDB 身份验证机制登录 MongoDB 的代码 try var credential MongoCredential CreateMongoCRCredential test admin 123456 var sett
  • 将 2D 数组映射到 1D 数组

    我想用一维数组来表示一个二维数组 函数将传递两个索引 x y 和要存储的值 这两个索引代表一维数组的单个元素 并相应地设置它 我知道一维数组需要具有 arrayWidth arrayHeight 的大小 但我不知道如何设置每个元素 例如 如
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 身份未映射异常

    System Security Principal IdentityNotMappedException 无法转换部分或全部身份引用 该错误仅在应用程序注册后出现一次 当 SecurityIdentifier 无法映射时 例如 返回 Ide
  • 控制台应用程序 .net Core 2.0 的配置

    在 net Core 1 中我们可以这样做 IConfiguration config new ConfigurationBuilder AddJsonFile appsettings json true true Build 这样就可以使
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 防止复制构造和返回值引用的分配

    如果我有一个函数返回对类实例的引用 但我无法控制其源 比如说list
  • 如何在不使用reinterpret_cast的情况下使用dlsym()加载函数?

    我正在尝试使用 clang tidy 来强制执行 C 核心指南 虽然它确实有很多有效点 但有一件事我无法真正解决 dlsym 返回一个void 我需要以某种方式将其转换为正确的函数指针 为此 我使用reinterpret cast 由于指南
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • C++ Primer 5th Edition 错误 bool 值没有指定最小大小?

    bool 的最小大小不应该是 1 个字节吗 这有点学术性的东西 尽管它们会转换为数字 并且 与其他所有事物一样 它们最终将基本上由计算机内存中的数字表示 但布尔值不是数字 你的bool可以取值true 或值false 即使您确实需要至少 1
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • C++0x 中的新 unicode 字符

    我正在构建一个 API 它允许我获取各种编码的字符串 包括 utf8 utf16 utf32 和 wchar t 根据操作系统 可能是 utf32 或 utf16 新的 C 标准引入了新类型char16 t and char32 t没有这么
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode

随机推荐

  • 如何计算孩子的数量?

    我有一个清单 ul li li li li li li ul 我需要 jQuery 来计算列表中的项目数 您可以使用 length 像这样 var count ul li length length告诉选择器找到了多少个匹配项 因此这会计算
  • 更新 mongodb 中的嵌套数组

    我在 mongodb 中有一个文档 其中包含需要更新的 2 级深度嵌套对象数组 如下所示 id 1 items id 2 blocks id 3 txt hello 如果只有一层深数组 我可以使用位置运算符来更新其中的对象 但对于第二层 我
  • Google App Engine 标准环境还是灵活环境?

    我陷入了选择 Google App Engine Standard 和 Google App Engine Standard 之间的抉择 适合现实世界生产的灵活环境 我肯定想使用Java 需要使用Firebase 最新版本 进行身份验证和推
  • 为子字符串搜索建立索引?

    我想在数十亿个字符串中进行常规子字符串搜索 这个要求与一般的全文搜索有点不同 因为我希望查询 ubst 也可以点击 substr Lucene 或 Sphinx 能够做到这一点吗 如果没有 您认为最好的方法是什么 这种情况下的最佳索引结构是
  • iOS 和 Android 共享 HTTP 深度链接?

    我正在尝试通过 URL 通过电子邮件等共享 启动我的本机应用程序 Android 似乎只响应 HTTP 深层链接 URL 例如 http myapp com stuff 并且 iOS 仅响应非 HTTP 自定义深层链接 URL 例如 mya
  • SPA - Firebase 和 .Net WebApi 2 身份验证

    我有一个用 AngularJs 编写的单页应用程序 此时框架无关紧要 该应用程序托管在 IIS 中 它由 index html 和一堆客户端资产组成 在后端 我有 WebApi 2 它也作为单独的应用程序托管在 IIS 中 对于客户端身份验
  • 不安全的 JavaScript 尝试通过 URL 访问框架

    我已将 Vimeo 合并到我正在构建的 WordPress 主题中 但出现以下错误 不安全的 JavaScript 尝试通过 URL 访问框架http themes ibrogram com beta blog 来自带有 URL 的框架ht
  • 停止在 jqgrid 中调整列大小

    如何使 jqgrid 的所有列不可调整大小 目前我认为每一列都必须指定属性 ressized false 我可以为整个网格指定吗 从版本 3 8 2 开始 jqGrid 支持一项非常有用的功能 栏模板 我赞扬该功能可能不太正确 因为该功能是
  • 当浏览器重新加载/返回时,如何防止数据库被再次写入?

    我正在编写一个小型 Web 应用程序 用于写入数据库 Perl CGI 和 MySQL CGI 脚本从表单中获取一些信息并将其写入数据库 然而 我注意到 如果我在网络浏览器上点击 重新加载 或 返回 它会再次将数据写入数据库 我不想要这个
  • Rails 返回:[BUG] 分段错误

    如果我跑rails s I get Users adam rvm gems ruby 1 9 3 p327 gems pg 0 13 2 lib pg ext bundle BUG Segmentation fault ruby 1 8 7
  • Java - 将小写转换为大写而不使用 toUppercase()

    我正在尝试创建一个简短的程序 将所有大写字母转换为小写字母 从命令行输入 以下编译但没有给出我期望的结果 这会是什么原因呢 例如 java toLowerCase BANaNa gt 给出香蕉的输出 public class toLower
  • VS2010 抛出“无法复制文件“obj\x86\Debug\[file].exe”,因为找不到该文件。”

    我正在编写一个 Windows Phone 8 游戏 需要许多支持桌面应用程序 关卡编辑器等 由于我只有 VS 的 Express 版本 因此我使用 2010 for Windows Phone 来创建这些游戏 2012 不提供创建 Win
  • 创建零填充 JavaScript 数组的最有效方法?

    在 JavaScript 中创建任意长度的零填充数组的最有效方法是什么 ES6引入Array prototype fill 它可以这样使用 new Array len fill 0 不确定它是否很快 但我喜欢它 因为它很短并且具有自我描述性
  • Python内存模型

    我有一个很大的清单 假设我这样做 是的 我知道代码非常不Python 但为了示例 n 2 32 2 for i in xrange 10 7 li i n 工作正常 然而 for i in xrange 10 7 li i i 2 消耗大量
  • 如何使用 cl 编译 Window API 程序?

    我正在尝试使用 Windows SDK 命令提示符编译一个简单的 C Windows API 程序 以下是该计划的摘录 include
  • 解码 JPEG 文件的部分内容

    我正在尝试以有限的内存占用加载大 JPEG 文件 数百兆像素 的一部分 我只需要大约 20000 条扫描线 1000 条 看来 libjpeg 及其分支 libjpeg turbo 的当前实现没有提供跳过不需要的 19k 扫描线而不对其进行
  • 选择mongodb中的嵌套字段

    我在 mongodb 中有一个集合 其中字段嵌套在语言根下 en title eng title content eng content it title it title content it content common attribu
  • 使用 adb 连接到 Raspberry Pi 3

    我如何连接adb到 Raspberry Pi 3 运行安卓事物 Android Things for Raspberry Pi 仅支持使用 adb over ip 通过以下命令连接到 adb adb connect
  • Django管理列表显示+外键=空更改列表

    我在 django admin 中遇到了一个奇怪的问题list display 每当我将外键添加到list display整个更改列表视图变为空白 仅显示条目总数 模型 py class Organization models Model
  • var 关键字并不总是有效?

    C VS 2010 有人请解释一下为什么我不能使用var在我下面的代码中 var props TypeDescriptor GetProperties adapter error CS1061 object does not contain