在 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方法中的计数器值属性,这样我就可以像[=19=一样追加]

或者如果没有 loopingfetching 来自 DB.

的计数,是否还有其他更好的方法可以实现此目的

提前致谢。

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

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

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

现在您可以在 Name-属性:

中轻松访问该计数器
string Name { get => $"Name{ counter }"; }

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

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

class MyClass {
  private static int s_Count;

  public string TName {
    get;
  }

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