c# - 正确的过载选择

标签 c#

我有密码

//this runs 
string[] s_items = {"0","0"};
string s_output = string.Format("{0}{1}",s_items);

//this one throws a exception
int[] i_items = {0,0};          
string i_output = string.Format("{0}{1}",i_items);

为什么第一个运行而第二个抛出异常? 为什么选择

int[] Format(String, Object)过载

string[] Format(String, Object[])过载

最佳答案

string[] 可以转换为 object[],因为它们都是引用类型的数组。并且所有引用都是“相等的”。这是从第一天开始就内置到 C# 语言中的令人讨厌的(数组)转换之一,本不应该存在,但从第一天开始我们就没有泛型和适当的协变/逆变规则。

int[] 不能转换为 object[] 因为 int,第一个数组中实际包含的东西,是不是引用。

关于c# - 正确的过载选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51280028/

相关文章:

c# - 使用 phpMyAdmin 从远程计算机连接到本地 MySQL 数据库

c# - 更新所有子实体,EF/Linq

c# - 列出客户端打印机

c# - .net c# 匿名管道 - 被误解了吗?

c# - 从 C# 应用程序获取 WindowsExplorer 中的当前选择?

c# - 将 SQL DB 部署到 Azure 超时启用索引

c# - 检查是否已在 SqlDataReader 上调用 read()

c# - 通过 LINQ 将表达式树应用于 List

c# - 如果是 .NET Framework 的 .NET 库,如何在 OSX 中使用 GemBox.Spreadsheet

c# - 如何以编程方式在 DFS 中获取事件的 UNC 路径