Увеличьте счетчик в методе установки для свойства в c # - PullRequest
0 голосов
/ 23 октября 2018

В class я объявил один property, как показано ниже

class MyClass
{
    public string TName
    {
         get {return "";}
    }

    // and some other properties ....
}

Один метод возвращает тип IEnumerable<MyClass>, здесь я хочу получить значение TName как

Name 1, Name 2, Name 3, Name 4........

на основе подсчета.

Проблема:

Как я могу увеличить значение счетчика в моем setterметод вышеупомянутого свойства, так что я могу добавить как "Name" + counter;

Или есть какой-либо другой лучший способ достичь этого без looping и fetching счет от DB.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

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

class MyClass
{
    static int count = 0;
    public MyClass() { count++; }
}

Теперь вы можете легко получить доступ к этому счетчику в вашем Name -свойстве:

string Name { get => $"Name{ counter }"; }

Если есть несколько потоков, которые могут одновременно увеличивать counter, лучше использовать Interlocked.Increment(ref count) вместо count++ в конструкторе.

0 голосов
/ 23 октября 2018

Та же идея (у нас есть счетчик s_Count), но в случае, если вы хотите его потокобезопасный , мы должны увеличить его специальным образом:

class MyClass {
  private static int s_Count;

  public string TName {
    get;
  }

  public MyClass() {
    TName = $"Name {Interlocked.Increment(ref s_Count)}";
  }    
}
0 голосов
/ 23 октября 2018

вам нужно будет сохранить значение TName в частной строке;

private string m_TName;
public string TName
{
    get {return m_TName + counter;}
    set {
        if (m_TName != value){
            m_TName = value
        }
    }
}

, если TName всегда одинаково, вы можете использовать

private string m_TName = "Default value";
public string TName
{
    get {return m_TName + counter;}
}

, еслиВы хотите увеличивать счетчик при каждом вызове

private string m_TName = "Default value";
public string TName
{
    get { 
        counter++;
        return m_TName + counter;
    }
}

, если хотите, чтобы он был в каждом экземпляре согласно комментарию HimBromBeere

private string m_TName;
public string TName
{
    get {return m_TName;}
    set {
        if (m_TName != value){
            counter++;
            m_TName = value + counter;
        }
    }
}

, если вы хотите, чтобы он был при каждом экземпляре согласно комментарию HimBromBeere И выхочу установить только один раз

private string m_TName;
public string TName
{
    get {return m_TName;}
    set {
        if (m_TName != value && m_TName == null){
            counter++;
            m_TName = value + counter;
        }
    }
}
...