在 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=一样追加]
或者如果没有 looping
和 fetching
来自 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)}";
}
}
在 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=一样追加]
或者如果没有 looping
和 fetching
来自 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)}";
}
}