2013-07-14 2 views
1

Я пытаюсь добавить короткое значение в список индексов, но я получаю сообщение об ошибке, что метод имеет недопустимые аргументы.Добавить метод в список

int verticesStart = vertices.Count(); 
    short vertStart = (short)verticesStart; 

Поскольку список индексов является «коротким», я бросил переменную verticesStart так она годна к употреблению.

indices.Add(vertStart + 0); 

Эта строка, где я получаю сообщение об ошибке. Мне не разрешено выполнять какую-либо математическую функцию в методе добавления?

+2

Каков тип 'индексов'? –

+0

короткий. Буфер индекса может быть только 16-разрядным типом –

+0

Нет, я имею в виду «индексы», то, что вы вызываете «Добавить». Я не знаю, какой тип контейнера он есть. –

ответ

2

Поскольку список индексов является "short"

Таким образом, вы можете только добавить short с до indices.

vertStart + 0

Правила языка указывают, что short + int имеет тип int. Так как vertStart относится к категории short и 0 является номером int, vertStart + 0 имеет тип int. Поэтому

indices.Add(vertStart + 0); 

пытается добавить int в список, который вы сказали, держит short с. Это невозможно.

Мне не разрешено выполнять какую-либо математическую функцию в методе Add?

Дело не в этом. Любые выражения оцениваются по их значениям до их передачи по методу Add. В вашем случае у вас есть выражение, которое вычисляет тип int. Но если indicies действительно является List<short>, как вы говорите, то вы не можете добавить int s к нему. Вам нужно будет сузить конверсию до short.

indices.Add((short)(vertStart + 0)); 
+0

Это сработало. Я забыл, что любое простое число - это int. Спасибо –

+0

Этот ответ неверен, поскольку он подразумевает, что если бы у вас было два '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. Фактически, это 'int'. Кроме того, '0' является литералом, который обычно (например,' var x = 0; ') разрешает' int', но он более гибкий; например 'short s = 1;' действительно, хотя 'int i = 1; short s = i; 'нет. Любопытный, 'const int i = 1; short s = i; 'действительно (поскольку компилятор способен понять вторую часть как« short s = 1; '). –

+1

@ Тим С .: Это не подразумевает такой вещи. И хотя то, что вы говорите о «коротких словах», верно, они не имеют отношения к этому вопросу. – jason

0

Арифметика всегда выполняется не менее int. Поэтому, когда вы делаете это дополнение (зачем добавлять 0, если я могу спросить?), Вы получите int. После этого вам придется снова отступить назад.

+0

Эх дерьмо. Индексы списка используются для хранения информации в моем индексном буфере, но я могу хранить только 16-битное значение в буфере, поэтому использование int не является опцией –

-2

Используя это:

using System; 
using System.Collections.Generic; 

public class Test 
{ 
    public static void Main() 
    { 
     List<short> list = new List<short>(); 
     list.Add(1+1); 
    } 
} 

В C# 1 будет int так что вам нужно, чтобы убедиться, что вы добавить переменные из short

3

Арифметика в C# определен для 32-битных и а не для short. Когда вы делаете vertStart + 0, результатом является int, что вы должны бросить обратно в short:

indices.Add((short)(vertStart + 0)); 

(я предполагаю, что вы на самом деле не добавлять 0, но некоторое другое значение.Поскольку добавление 0, конечно, не меняет значение.)