为什么不能设置Public Var?

Elv*_*vin 2 c# variables

我想设置以下public var:

var collection = new Dictionary<string, Statistics>();
Run Code Online (Sandbox Code Playgroud)

我希望能够通过我的应用程序使用相同的集合,因此我希望在应用程序启动时在顶部创建它.

我该怎么办?

Tig*_*ran 6

C#中没有全局变量的概念.你总是必须在某个类/范围内声明变量.

可以做的是通过public修饰符使它可以访问,比如属性(比方说).

只是一个想法:

public class Shared
{
     public Dictionary<string, Statistics> CollectionDic {get;set;}

     public Shared() {
        CollectionDic  = new Dictionary<string, Statistics>();
     }
}
Run Code Online (Sandbox Code Playgroud)

您可以访问它之后:

var shared = new Shared(); 
shared.CollectionDic.Add(..)
...
Run Code Online (Sandbox Code Playgroud)

您必须自己锻炼,以满足您的确切需求.


tuk*_*aef 5

您可以将其创建为公共类中的公共静态字段或属性(也可以是静态的):

public class Variables
{
    public static Dictionary<string, Statistics> collection = new Dictionary<string, Statistics>();
}
Run Code Online (Sandbox Code Playgroud)

然后在代码中访问它:

Variables.collection.Add(...);
Run Code Online (Sandbox Code Playgroud)

请注意,这不是线程安全的方法。因此,如果您打算在多线程应用程序中使用静态字典,最好使用静态方法,以线程安全的方式包装字典(如 Jon Skeet 所述)或使用线程安全的集合,例如ConcurrentDictionary

  • ...尽管值得注意的是,静态成员通常是线程安全的,而 `Dictionary&lt;,&gt;` 根本不是。最好为所需操作提供静态方法,以线程安全的方式包装字典。当然,最好还是首先避免静电...... (2认同)