提问人:sumeyye 提问时间:6/25/2023 最后编辑:Dmitry Bychenkosumeyye 更新时间:6/25/2023 访问量:71
C# 强制转换, Indexof [已关闭]
C# casting, Indexof [closed]
问:
我是编程新手(5 天)。我写了这段代码,但索引总是(当预期时),我无法修复它。-1
2
我的老师给我写了这样一封信:
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);
我试图看到正确的数字(应该是)。index
2
答:
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.
问题在于,无论数字对我们人类来说代表什么,值数组中都没有任何值。int
short
2赞
Dmitry Bychenko
6/25/2023
#2
代码的主要问题是,您可以在其中找到数组和值,而 .net 无法为您执行隐式转换 from to。有几种重载实现:short[]
int
int
short
Array.IndexOf
- Array.IndexOf(T[], T):不会被使用,因为 .net 不能转换为或转换为单个泛型
int
short
short[]
int[]
T
- Array.IndexOf(Array, Object):这将被调用
在 .net 中,在对象数组中查找对象(盒装值)。数组包含的值(可以装箱,但仍是 ),而不是 ,因此 .net 找不到 。Array.IndexOf(Array, Object)
int
short
short
int
int
可能的更正:
- Make have 值:
geburtsjahr
int
var geburtsjahr = new int[4] { 1998, 1992, 1966, 2006 };
- 寻找:
short
int index = Array.IndexOf(geburtsjahr, (short)1966);
- 让 .net 为您进行强制转换(类型为 ):
1966
short
int index = Array.IndexOf<short>(geburtsjahr, 1966);
评论
geburtsjahr
short[]
(short)1966
(int)1966
int index = Array.IndexOf(geburtsjahr, (short)1966);