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
方法之前,都会对其值进行求值。在本例中,有一个表达式的计算结果为type
int
。但是,如果
标记
如您所说确实是一个
列表
,那么您就不能向其中添加
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
,前提是常量表达式的值在目标类型的范围内。”