C# 强制转换, Indexof [已关闭]

C# casting, Indexof [closed]

提问人:sumeyye 提问时间:6/25/2023 最后编辑:Dmitry Bychenkosumeyye 更新时间:6/25/2023 访问量:71

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

5个月前关闭。

我是编程新手(5 天)。我写了这段代码,但索引总是(当预期时),我无法修复它。-12

我的老师给我写了这样一封信:

Casting, Array.IndexOf(geburtsjahr, (int)1966);

我试过了,但仍然一样。

这是我的相关代码:

var geburtsjahr = new short[4] { 1998, 1992, 1966, 2006 }; 

// Expected: 2, Actual: -1
int index = Array.IndexOf(geburtsjahr, (int)1966);

Console.WriteLine(index); 

我试图看到正确的数字(应该是)。index2

C# 数组 转换 indexof

评论

3赞 user207421 6/25/2023
对我来说,它看起来更像是 c#
1赞 Rode093 6/25/2023
它是 C# 而不是 C++
0赞 Rode093 6/25/2023
请说明您要解决的问题。从代码中看不清你要做什么。
1赞 user207421 6/25/2023
作为一个 ,你应该尝试而不是 ,它实际上什么也没做。明显地。geburtsjahrshort[](short)1966(int)1966
0赞 Dmitry Bychenko 6/25/2023
int index = Array.IndexOf(geburtsjahr, (short)1966);

答:

0赞 Enigmativity 6/25/2023 #1

如果您执行以下任一操作,它就会起作用:

(1)

var geburtsjahr = new short[4] { 1998, 1992, 1966, 2006 };
int index = Array.IndexOf(geburtsjahr, (short)1966);

(2)

var geburtsjahr = new int[4] { 1998, 1992, 1966, 2006 };
int index = Array.IndexOf(geburtsjahr, (int)1966); //or just 1966 without the cast.

问题在于,无论数字对我们人类来说代表什么,值数组中都没有任何值。intshort

2赞 Dmitry Bychenko 6/25/2023 #2

代码的主要问题是,您可以在其中找到数组和值,而 .net 无法为您执行隐式转换 from to。有几种重载实现:short[]intintshortArray.IndexOf

在 .net 中,在对象数组中查找对象盒装值)。数组包含的值(可以装箱,但仍是 ),而不是 ,因此 .net 找不到 。Array.IndexOf(Array, Object)intshortshortintint

可能的更正:

  1. Make have 值:geburtsjahrint
var geburtsjahr = new int[4] { 1998, 1992, 1966, 2006 }; 
  1. 寻找:short
int index = Array.IndexOf(geburtsjahr, (short)1966);
  1. 让 .net 为您进行强制转换(类型为 ):1966short
int index = Array.IndexOf<short>(geburtsjahr, 1966);