Из документации:
В отличие от классов, структуры можно инстанцировать, не используя новый оператор.
Итак, почему я получающий эту ошибку:
Использование неприсвоенной локальной переменной 'x'
Когда я пытаюсь сделать это?
Vec2 x;
x.X = det * (a22 * b.X - a12 * b.Y);
x.Y = det * (a11 * b.Y - a21 * b.X);
Где Vec2 x
структура?
Ну, являются свойствами X и Y (а не поля)? Если это так, это проблема. До тех пор, пока все поля в пределах x
определенно не назначены, вы не можете вызывать какие-либо методы или свойства.
Например:
public struct Foo
{
public int x;
public int X { get { return x; } set { x = value; } }
}
class Program
{
static void Main(string[] args)
{
Foo a;
a.x = 10; // Valid
Foo b;
b.X = 10; // Invalid
}
}
IS VEC2
Ваш собственный тип? У вас есть доступ к включенным полям или только свойствам?
Если это ваш собственный тип, я бы сильно призывает вас попытаться придерживаться неизменных структуров. Я знаю, что управляемый DirectX имеет несколько мультиптурных структур для того, чтобы получить как можно ближе к оптимальной производительности, но это за стоимость странных ситуаций, как это - и намного хуже, если честно.
Я бы лично дал структуру конструктора, принимаю X и Y:
Vec2 x = new Vec2(det * (a22 * b.X - a12 * b.Y),
det * (a11 * b.Y - a21 * b.X));
, он все еще неинициализирован. Вам нужно инициализировать его, прежде чем использовать его. Вы можете использовать Default
Default Оператор для этого, если вы не хотите создавать статические vec.empty
значение и довольны значениями по умолчанию для членов структуре:
Vec2 x = default(Vec2);
Митч пшеница:
Это, однако, не:
public struct Vec2
{
int x;
int y;
public float X { get { return x; } set { x = value; } }
public float Y { get { return y; } set { y = value; } }
}
static void Main(string[] args)
{
Vec2 x;
x.X = 1;
x.Y = 2;
}
Компилятор предотвращает вызов Propertis на типы до того, как все его члены инициализированы, даже если свойство может просто установить одно из значений. Решение, как предложил Джон Скелет, должен иметь инициализацию конструктора и предпочтительно нет больных.