2013-11-25 2 views
0

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

Мне любопытно, является ли этот образец кода плохой практикой или нет. Я просто проверяю, имеет ли свойство значение null. Если он равен нулю, я устанавливаю его в параметр, иначе он будет настроен на себя. Существуют ли случаи, когда это может вызвать серьезную проблему?

public class Entity 
{ 
    public Entity(int id, float health, Vector3 location) 
    { 
    Init(id, health, location); 
    } 
    public void Init(int id, float health, Vector3 location) 
    { 
    Id = id; 
    Health = health; 
    Location = Location ?? location; 
    } 
    public int Id { get; set; } 
    public float Health { get; set; } 
    public Vector3 Location { get; set; } 
} 

Кроме того, есть ли способ сделать что-то подобное в одной строке?

Location = ?? location; 

Таким образом, он не должен устанавливать местоположение для себя, когда оно не является нулевым?

+3

Он не может иметь местоположение уже при его построении. – Magus

+0

Разве не 'Vector3' является структурой? Если это так, вы не сможете проверить значение «null» в любом случае, если вы не объявите «Vector3?» (Значение NULL). – IAbstract

+0

Я не понимаю, что вы намереваетесь с 'Location = Location ?? ...; 'Не имеет смысла, потому что он всегда нулевым в этой точке исполнения. – JeffRSon

ответ

2

Ну, в конструкторе это необязательно, потому что Location всегда будет иметь значение null (или default(Vector3)) во время выполнения кода. Таким образом, вы можете просто написать:

public Entity(int id, float health, Vector3 location) 
{ 
    Id = id; 
    Health = health; 
    Location = location; 
} 

В других случаях, когда значение Location не известно в то время, код выполняется, это достаточно коротким:

Location = Location ?? location; 

Но лично я предпочитаю более явный синтаксис большую часть времени:

if (Location == null) 
{ 
    Location = location; 
} 
+0

Спасибо. Я просто не был уверен, что для этого есть еще одна стенография. –

Смежные вопросы