Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 静态类和Getter_C#_Collections_Static - Fatal编程技术网

C# 静态类和Getter

C# 静态类和Getter,c#,collections,static,C#,Collections,Static,我有一个名为Test的静态类和一个私有列表集合。现在我想实现一个getter来将我的列表返回到主类。这是正确的方法吗 其次,实现静态构造函数可以吗?如果不是,我如何正确声明我的列表集合 static class Storage { private static List<string> store; static Storage() { store = new List<string>(); } //Is it oka

我有一个名为Test的静态类和一个私有列表集合。现在我想实现一个getter来将我的列表返回到主类。这是正确的方法吗

其次,实现静态构造函数可以吗?如果不是,我如何正确声明我的列表集合

static class Storage
{

   private static List<string> store;

   static Storage()
   {
       store = new List<string>();


   }

   //Is it okay to have a getter in my static class to return my List Collection
   public static List<string> getList
   {
       get
       {
           return store;
       }


   }

   public static void addString(string add)
   {
       store.Add(add);
   }

   public static void removeString(string remove)
   {
       store.Remove(remove);
   }
静态类存储
{
私有静态列表存储;
静态存储()
{
store=新列表();
}
//在静态类中使用getter返回列表集合可以吗
公共静态列表getList
{
得到
{
退货店;
}
}
公共静态void addString(字符串添加)
{
store.Add(Add);
}
公共静态空洞移除(字符串移除)
{
储存。移除(移除);
}

您可以改为执行
私有静态只读列表存储=新列表()

使用属性返回字段是正确的方法。永远不要使用公共字段


此外,当我们讨论style时:根据Microsoft发布的命名约定,方法和属性名称应以大写字母开头。

如果您在getter中返回对列表的引用,则任何调用方都可以在列表中添加或删除项,而无需通过静态类上的add/remove方法。如果您希望如果有人修改列表,我将从getter返回一个:

public static IEnumerable<string> getList
{
   get
   {
       return store.AsReadonly();
   }
}
公共静态IEnumerable getList
{
得到
{
return store.AsReadonly();
}
}
编辑


正如Marc指出的,您需要注意多线程问题。假设一个线程枚举通过getter获得的集合,而另一个线程通过添加或删除项来修改它->您将得到一个异常,说明在枚举集合时无法修改它。唯一的解决方案是锁定所有访问到私有集合并在getter中返回一个副本。

对我来说似乎是一个问题。您应该非常小心这里的线程问题;静态字段通常是线程问题。谢谢Daniel。您对我的方法名称的更正。我只是在玩C#。因此,我实现getter以返回列表集合的方式是t正确的方法吗?是的,那很好。虽然你的添加和删除方法是多余的。谢谢Chris。我可以说ICollection而不是IEnumerable吗?是的,你可以返回
ICollection
而不是让我使用ICollection,并从我的主程序调用它,我如何循环通过它来查看字符串值(Storage.getList中的字符串值){…}