[英]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.