Member 11859517 Ответов: 2

Как проверить, установлено свойство или нет? В C#.


Привет,
У меня есть некоторые целочисленные свойства в моем классе, я создаю экземпляр класса и устанавливаю какое-то свойство в какое-то значение, и я не устанавливаю какое-то свойство, а принимаю его значение по умолчанию равным 0,
так что я не хочу, чтобы не заданные свойства,
так как же проверить, установлено свойство или нет?
может ли кто-нибудь предложить меня?

заранее спасибо
сушил

Что я уже пробовал:

класс Class1
{
public int SomePropery1{get; set}
public int SomeMoreProp{get; set;}
}

class1 c1 = новый class1()
c1. SomePropery1 = 1;

2 Ответов

Рейтинг:
2

BillWoodruff

Если эти целочисленные свойства имеют некоторую согласованную регулярную функцию, и вы не хотите использовать тип Nullable Int, как предложил Мехди, вы можете сделать что-то вроде этого

public class YourClass
{
    public const Int32 INTNOTSET = Int32.MinValue;

    public int Int1 { set; get; }

    public YourClass()
    {
        Int1 = INTNOTSET;
    }
}
Затем вы должны проверить, инициализируется ли это свойство следующим образом:
YourClass yourClass = new YourClass();

if (yourClass.Int1 == YourClass.INTNOTSET)
{
   // Int1 uninitialized 
}
else
{
   // Int1 value set  
}
Обратите внимание, что определение INTNOTSET как константы в 'YourClass приводит к тому, что он является статическим полем класса, доступ к которому должен осуществляться через ссылку на сам класс.

Не зная больше о том, что такое ваше приложение и что оно делает, а также об общих аспектах ваших переменных Int и их использовании( если таковые имеются), оценка релевантности любой техники - это взгляд в хрустальный шар :) Однако если ваши свойства Int предназначены для хранения значений, возвращаемых из баз данных запросов, то вы, вероятно, захотите использовать Nullable Int.

Использование Nullable типов не вызывает бокса и un-бокса, но добавляет некоторые накладные расходы, но так же как и техника, показанная здесь, или любая другая техника.

В зависимости от контекста, в одном сценарии использование словаря<string,int> может быть полезным и так далее.


Member 11859517

спасибо Билл Вудрафф

Member 11859517

у меня есть больше propery, int,bool, string, long,...
и я делаю что-то вроде этого

Словарь< string, object="" & gt; dic = новый словарь< string, object="">();
по каждому элементу (PropertyInfo Пи на объект MyObject.GetType (). GetProperties())
{
if (pi. PropertyType == typeof (string))
{
...здесь я хочу проверить, установлено свойство или нет ....
string value = (string)pi. GetValue(myObject, null);
if (! string.IsNullOrEmpty(значение))
{
ДВС-синдром.Добавить(Пи.Имя, значение);
}
}
if (pi. PropertyType == typeof(int?))
{
...здесь я хочу проверить, установлено свойство или нет ....
int value = (int)pi. GetValue(myObject, null);
if (value != null)
ДВС-синдром.Добавить(Пи.Имя, значение);
}
}
в моем классе больше свойств, я устанавливаю только 2 5 prop. Хочу проверить свойство имеет значение или нет,,,

у плз есть какая-то идея..

Рейтинг:
13

Member 11859517

знаете ли вы, в какой .net framework добавлен nullable?

Mehdi Gholam

Так .чистой версии v2.0

Member 11859517

спасибо Мехди,

но у меня есть более 50 реквизитов. есть ли какой-то общий способ сделать это?

Mehdi Gholam

Найти и заменить на а ? в конце.

Member 11859517

привет Мехди,
как вы сказали используйте nullable
у меня есть больше propery, int,bool, string, long,...
и я делаю что-то вроде этого

Словарь< string, object="" & gt; dic = новый словарь< string, object="">();
по каждому элементу (PropertyInfo Пи на объект MyObject.GetType (). GetProperties())
{
if (pi. PropertyType == typeof (string))
{
.... здесь я хочу проверить, установлено свойство или нет .... как?
string value = (string)pi. GetValue(myObject, null);
if (! string.IsNullOrEmpty(значение))
{
ДВС-синдром.Добавить(Пи.Имя, значение);
}
}
if (pi. PropertyType == typeof(int?))
{
.... здесь я хочу проверить, установлено свойство или нет .... как?
int value = (int)pi. GetValue(myObject, null);
if (value != null)
ДВС-синдром.Добавить(Пи.Имя, значение);
}
}
в моем классе больше свойств, я устанавливаю только 2 5 prop. Хочу проверить свойство имеет значение или нет,,,