C# 在列表中添加方法
我试图向索引列表中添加一个短值,但得到一个错误,即该方法具有无效参数C# 在列表中添加方法,c#,C#,我试图向索引列表中添加一个短值,但得到一个错误,即该方法具有无效参数 int verticesStart = vertices.Count(); short vertStart = (short)verticesStart; 由于索引列表是一个“short”,因此我强制转换变量VerticeStart,使其可用 indices.Add(vertStart + 0); 这一行是我得到错误的地方。我不允许在Add方法中执行任何类型的数学函数吗?算术总是在至少int上执行。
int verticesStart = vertices.Count();
short vertStart = (short)verticesStart;
由于索引列表是一个“short”,因此我强制转换变量VerticeStart,使其可用
indices.Add(vertStart + 0);
这一行是我得到错误的地方。我不允许在Add方法中执行任何类型的数学函数吗?算术总是在至少
int
上执行。所以当你做加法时(如果我可以问的话,为什么要加0?),你会得到一个int
。之后你又得重新做空了
因为索引列表是一个“short
”
因此,您只能将short
s添加到索引中
vertStart+0
该语言的规则指定short+int
具有类型int
。由于vertStart
是short
类型,而0
是int
文本,vertStart+0
具有int
类型。所以,
indices.Add(vertStart + 0);
正在尝试将int
添加到您所说的包含short
s的列表中。这是不可能的
我不允许在Add
方法中执行任何类型的数学函数吗
这不是重点。在将任何表达式传递给Add
方法之前,都会对其值进行求值。在本例中,有一个表达式的计算结果为typeint
。但是,如果标记
如您所说确实是一个列表
,那么您就不能向其中添加int
s。您必须将转换范围缩小到short
indices.Add((short)(vertStart + 0));
使用此选项:
using System;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
List<short> list = new List<short>();
list.Add(1+1);
}
}
使用系统;
使用System.Collections.Generic;
公开课考试
{
公共静态void Main()
{
列表=新列表();
列表。添加(1+1);
}
}
在C#中,1将是int
,因此您需要确保添加short
的变量。C#中的算术是为32位及以上整数类型定义的,而不是为short
。当您执行vertStart+0
时,结果是int
,您必须将其转换回short
:
indices.Add((short)(vertStart + 0));
(我假设您实际上并没有添加0
,而是添加其他值。因为添加0当然不会改变值。)索引的类型是什么。索引缓冲区只能是16位类型否,我的意思是索引
,即您正在调用的添加
。我不知道它是什么类型的容器。哦,这只是我用于索引缓冲区的短值列表。你的问题与添加短值/整数的方式有关。列表索引用于将信息存储到索引缓冲区中,但我只能在缓冲区中存储一个16位的值,因此使用int是不可行的。我忘记了任何简单的数字都是整数。谢谢。这个答案是不正确的,因为它意味着如果你有两个short
s并将它们加在一起,答案将是short
。事实上,它是一个int
。另外,0
是一个文本,通常(例如var x=0;
)解析为int
,但它更灵活;e、 g.short s=1代码>有效,但inti=1;短s=i代码>不可用。好奇者,const int i=1;短s=i
是有效的(因为编译器能够理解第二部分为short s=1;
)。@Tim s.:它并不意味着这样的事情。虽然你所说的short
s是正确的,但它们与这个问题无关。好吧,我想你是对的,从技术上讲,它与这个问题无关。然而,我从中解释了这一点,其他人可能也会这样做。不过,恐怕我的否决票已经被锁定,所以我无法撤销(除非你编辑它)。@Tim S.:C#规范的相关部分是§7.19,其中说:“隐式常量表达式转换(§6.1.9)允许将int
类型的常量表达式转换为sbyte
、byte
、short
、ushort
、uint
或ulong
,前提是常量表达式的值在目标类型的范围内。”