Свойство объекта установлено или нет? - PullRequest
0 голосов
/ 23 апреля 2020

Я хотел бы знать, есть ли способ узнать, был ли установлен параметр. Например, у меня есть мой объект User.

public class User{
    public int Oid{ get; set; }
    public string Name{ get; set; }
    public string Test{ get; set; }
}

Я создаю экземпляр моего объекта и задаю свойства Oid и Name, но не Test. Я хотел бы знать это.

User u = new User();
u.Oid = 1;
u.Name = "Test";

Это возможно?

TY

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Для ссылочных типов свойство (или поле), которое не установлено, будет иметь значение null. Поскольку string является ссылочным типом, вы можете проверить это очень просто:

if(u.Test == null)
 {
 Console.WriteLine("Property test of variable u is not set!");
 }

Для других типов это не так просто. bool переменные будут ложными по умолчанию, и все числовые значения c, такие как int uint, double et c, будут равны 0. Но, конечно, кто-то мог установить его полностью осведомленным об этих значениях .

Значение по умолчанию любого типа можно получить с помощью следующего:

int x = default(int); // will be 0
string y = default(y); // will be null
bool z = default(bool); // will be false;

ADDENDUM: Совершенно другим подходом будет следующий:

public class User{
    public int Oid{ get; set; }
    public string Name{ get; set; }

    private string test;
    public string Test
    {
        get { return test; }
        set {test = value; IsTestSet = true; }
    }

    public bool IsTestSet {get; private set;}
} 

С помощью этого кода вы можете проверить свойство IsTestSet, чтобы определить, вызывался ли сеттер хотя бы один раз.

0 голосов
/ 24 апреля 2020

Это моё личное решение.

public short oid;
public short Oid
{
     get { return oid; }
     set
     {
         oid = value;
         AddListaSet("Oid");
     }
}
// for all parameter

List<string> ListSet { get; set; } = new List<string>();

private void AddListSet(string name)
{
    if (ListSet.Contains(name) == false)
        ListSet.Add(name);
}
public bool IsSet(string name)
{
    return ListSet.Contains(name) ? true : false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...