繁体   English   中英

增加c#中属性的setter方法的计数

[英]Increase the count in setter method for a property in c#

在一个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方法中增加 counter的值,以便我可以追加"Name" + counter;

或者有没有其他更好的方法来实现这一点,而无需looping和从DB fetching计数。

先感谢您。

同样的想法(我们有一个计数器s_Count ),但如果你想要它的线程安全,我们必须以一种特殊的方式增加它:

class MyClass {
  private static int s_Count;

  public string TName {
    get;
  }

  public MyClass() {
    TName = $"Name {Interlocked.Increment(ref s_Count)}";
  }    
}

您需要MyClass中的静态计数器,其中包含已创建的实例数:

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

现在,您可以在Name -property中轻松访问该计数器:

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

如果有多个线程可以同时递增counter最好在构造函数中使用Interlocked.Increment(ref count)而不是count++

你需要将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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM