Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 增加c中属性的setter方法中的计数#_C#_Increment - Fatal编程技术网

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

C# 增加c中属性的setter方法中的计数#,c#,increment,C#,Increment,在类中我声明了一个属性如下 class MyClass { public string TName { get {return "";} } // and some other properties .... } 一种方法是返回类型IEnumerable,这里我想得到TName值 Name 1, Name 2, Name 3, Name 4........ 根据计数 问题: 如何在上述属性的setter方法中增加counter的值,以便像“

类中
我声明了一个
属性
如下

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

    // and some other properties ....
}
一种方法是返回类型
IEnumerable
,这里我想得到
TName

Name 1, Name 2, Name 3, Name 4........
根据计数

问题:

如何在上述属性的
setter
方法中增加counter的值,以便像
“Name”+counter那样追加

或者有没有其他更好的方法来实现这一点,而无需
循环
DB
获取计数


提前谢谢。

您需要将
TName
的值存储在私有字符串中

private string m_TName;
public string TName
{
    get {return m_TName + counter;}
    set {
        if (m_TName != value){
            m_TName = value
        }
    }
}
如果
t名称
始终相同,则可以使用

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;
    }
}
如果你想在每一个例子上都像他说的那样

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 }"; }
如果有多个线程可以同时递增
计数器
,那么最好在构造函数中使用而不是
计数+++

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

class MyClass {
  private static int s_Count;

  public string TName {
    get;
  }

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

这个类是否在数据库中持久化?您是否有一个
Id
Count
属性在数据库上设置为自动递增?我建议您考虑将其从
TName
重命名为
Name
。大写T通常放在泛型类型名称的开头,在这种情况下会令人困惑。我怀疑OP是否希望在每次调用时增加计数器,但在每次调用时都会增加计数器。如果是这样,您的答案会更好此答案比我的答案更好,因为它会在每个实例中给出完全相同的值,独立于同时创建了多少实例。非常感谢@Dmitry