首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#2.0中初始化非空静态集合的正确方法是什么?

在C# 2.0中,初始化非空静态集合的正确方法是使用静态构造函数。静态构造函数是在类被加载时自动调用的,因此可以确保在使用静态集合之前对其进行初始化。以下是一个示例:

代码语言:csharp
复制
public class MyClass
{
    private static readonly List<string> _myStaticCollection;

    static MyClass()
    {
        _myStaticCollection = new List<string>
        {
            "Item 1",
            "Item 2",
            "Item 3"
        };
    }

    public static List<string> MyStaticCollection
    {
        get { return _myStaticCollection; }
    }
}

在这个示例中,我们定义了一个名为MyClass的类,其中包含一个名为_myStaticCollection的静态只读字段。我们使用静态构造函数static MyClass()对该字段进行初始化。在这个构造函数中,我们创建了一个新的List<string>实例,并向其中添加了一些初始项。

然后,我们定义了一个名为MyStaticCollection的静态属性,该属性返回_myStaticCollection字段的值。这样,我们就可以通过MyClass.MyStaticCollection访问该集合。

总之,在C# 2.0中初始化非空静态集合的正确方法是使用静态构造函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Java】Java初始化顺序(静态方法静态块,静态块,最后有流程图)

想要弄明白这个,我就得先了解一下类生命周期了。我们通过主方法运行Java程序,而这个主方法创建了i对象并且属于InitializeDemo 类,所以main方法执行时会将我们类进行初始化。...我们类第一次进行初始化时候,我们类静态块和静态属性会被优先构建。之后才轮得到静态块和静态属性。...当你知道了上边规则之后,我们来看代码,类中有五个静态属性,一个静态属性,一个静态块,一个静态块还有一个静态方法。我们优先构建静态方法、属性和静态块,之后构建静态块。...类一个对象进行初始化,按照代码顺序从上往下先构建静态属性、方法静态块,之后构建静态块和静态属性。...那么我们初始化t1时候,就要从上向下找静态块和静态属性(如果有的话 ),最后执行构造方法

31110

C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器

另外C#2.0还提出了可类型,匿名方法和迭代器3个优美的特性。 1,泛型 1.1 泛型是什么 泛型英文表述是"generic", 这个单词意为通用。...而泛型是避免性能损失有效方法. 1.2全面解析泛型 在前面的泛型代码, T就是类型参数. 无论调用类型方法还是初始化泛型实例, 都需要用真实类型来替换T....所以如果委托包装方法相对简单, 并且该方法在其他地方调用频率较低, 我们就可以考虑用匿名方法来实例化委托对象了. 4, 迭代器 迭代器记录了集合某个位置, 它使程序只能向前移动....它是一个真正集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合项,假如连集合项都访问不了,那么进行集合循环遍历是不可能事情了。...; i++) 62 { 63 //C#2.0, 只需要使用下面的语句就可以实现一个迭代器 64 yield return friendArray[i]

1.2K110
  • 4-可类型、静态

    类型 值类型是不可以为null[即不可为值], 假如我们想让它为null呢[比如它对映这数据库某个表某个字段,但是这个字段是null]。...自己实现的话,简单写一个类,有一个值类型字段,检查该字段是否初始化,是的话返回该值,否的话返回null。 假如是C#1.0时,那么每个值类型都要写这么一份代码了。...C#2.0有了泛型支持,所以我们可以定义一个泛型版。 幸运C#2.0带来了一个新类型[System.Nullable]帮我们实现了,T就是需要传入类型[约束为值类型]....19 //否则返回当前 Nullable 对象默认值 20 //即使 HasValue属性为false,GetValueOrDefault方法也会返回一个值 21...不是迫不得已情况下最好不使用[效率不怎么好]。 2. 静态静态类是只用于包含静态成员,它既不能实例化,也不能被继承。

    81650

    C#基础篇——泛型

    前言 开发编程,我们经常会遇到功能非常相似的功能模块,只是他们处理数据不一样,所以我们会分别采用多个方法来处理不同数据类型。...,类静态类型无论实例化多少次,在内存只会有一个。...泛型类,T类型不同,每个不同T类型,都会产生一个不同副本,所以会产生不同静态属性、不同静态构造函数,请看下面的例子: public class GenericCache { static...泛型编程,虽然所有的东西都可以作为Object传递,但是传递过程免不了要进行类型转换。而类型转换在运行时是不安全。使用泛型编程将可以减少不必要类型转换,从而提高安全性。...不仅是值类型,引用类型也存在这样问题,因此有必要尽量去使用泛型集合泛型编程,将简单类型作为Object传递时会引起装箱和拆箱操作,这两个过程都是具有很大开销

    1.3K40

    C#泛型方法解析

    定义泛型类型或方法时,为类型指定了任何变量(如:T)都称为类型参数。(T是一个变量名,源代码能够使用一个数据类型任何位置,都可以使用T)C#泛型参数变量要么成为T,要么至少一大写T开头。...泛型类.NET应用主要在集合,大多数集合System.Collections.Generic和System.Collections.ObjectModel类。...具体看一下泛型接口IEnumerable:公开枚举数,该枚举数支持泛型集合上进行简单迭代。...(表示为:T:new())适用于所有值类型,所有没有显示声明构造函数静态抽象类,所有显示声明了一个公共无参构造函数抽象类。    ...五.总结:     本文讲解了C#2.0引入泛型知识,主要包含泛型类、泛型接口、泛型委托,并且重点讲解了泛型方法,已经泛型约束分类。最后给了一些利用泛型方法操作xml方法

    3.4K90

    C#各版本新增加功能(系列文章)

    元组模式 位置模式 静态本地函数 可处置 ref 结构 可为引用类型 异步流【*重要*】 索引和范围 具体新增功能请查看 C#8.0 新增功能 C# 7.3 C#7.3 随 VS2017 v15.7...C# 3.0 版和 5.0 版对面向对象语言添加了主要新功能。 6.0 版,它不再推出主导性杀手锏,而是发布了很多使得 C# 编程更有效率小功能。这些功能每一个都很有趣。...C# 4.0 版很难达到 3.0 版创新水平。 3.0 版,C# 已经完全从 Java 阴影脱颖而出,崭露头角。 很快成为一种简洁精炼语言。...C#2.0 新增功能01 分部类与分部方法 C#2.0 新增功能02 泛型 C#2.0 新增功能03 匿名方法 C#2.0 新增功能04 可以为 null 类型 C#2.0 新增功能05...迭代器 C#2.0 新增功能06 协变与逆变 C#2.0 新增功能07 getter/setter 单独可访问性 除现有功能以外其他 C# 2.0 功能: 方法组转换(委托) 静态类 委托推断 C

    1.9K10

    C++反射调用.NET(三) 使用泛型集合委托方法C++列表对象list C++传递集合数据给.NET创建泛型List实例反射静态方法反射调用索引器当委托遇到协变和逆变C++CLI

    .NET与C++之间传输集合数据 上一篇《C++反射调用.NET(二)》,我们尝试了反射调用一个返回DTO对象.NET方法,今天来看看如何在.NET与C++之间传输集合数据。...使用泛型集合委托方法 先看看.NET类一个返回列表数据方法: //返回List或者数组,不影响 C++调用 public List GetUsers(string...,好在IEnumerable也是继承 IEnumerable ,所以可以当做泛型对象C++访问,因此创建上面的委托方法是可行。...C++端看来,SaveUsers方法参数对象是一个泛型集合,但是具体是什么对象并不知道,所以需要反射出泛型集合类型,同时还需要构建这样一个泛型集合对象实例。...C++/CLI,用nullptr表示引用,跟C#null作用一样。

    9.1K100

    C#历代版本新特性——面试题常用

    掌握一门语言,当然要掌握它特性,而随着C#历代版本迭代更替,C#语言也日趋完善,C#2.0~C#4.0版本所带来语法特性格外重要。...,通过反射可以访问特性信息 Literals:字面值(或理解为常量值),区别常量,常量是和变量相对 C#2.0新特性 泛型及其相关,匿名方法 泛型 2.0版本C#语言和公共语言运行时(CLR)增加了泛型...initializers:对象和集合初始化器 Auto-Implemented properties:自动属性,自动生成属性方法,声明更简洁 Anonymous types:匿名类型 Extension...(Roslyn) Import of static type members into namespace:支持仅导入类静态成员 Exception filters:异常过滤器 Await in...catch/finally blocks:支持catch/finally语句块使用await语句 Auto property initializers:自动属性初始化 Default values for

    1.9K90

    5-迭代器

    1.枚举数 枚举数是循环访问其关联集合对象。它可被视作指向集合任何元素可移动指针。 一个枚举数只能与一个集合关联,但一个集合可以具有多个枚举数。...C#foreach 语句使用枚举数并隐藏操作该枚举数复杂性。枚举数可用于读取集合数据,但不能用于修改基础集合。...集合要支持foreach则需要实现System.Collections.IEnumerable接口[公开枚举数,该枚举数支持泛型集合上进行简单迭代, 也可以不实现该接口,该接口定义了一个方法GetEnumerator...(),返回一个支持IEnumerator接口对象,IEnumerator成员如下: 名称 说明 bool MoveNex t方法 将枚举数推进到集合下一个元素 void Rese t方法 将枚举数设置为其初始位置...以前,要使自己集合支持foreach遍历,需要写上面一大堆代码[实现两个接口,也可不实现, 但是必须给提供这两个接口中同名方法],C#2.0引入了yield return[返回每个元素]和yield

    50850

    语言设计鸭子类型风格

    动态语言设计,可以解释为无论一个对象是什么类型,只要它具有某类型行为(方法),则它就是这一类型实例,而不在于它是否显示实现或者继承。      鸭子类型动态语言中被广为奉行。...某类接口需要一个log接口,换句话说这借口中需要调用传入对象log,方法动态语言中无论你传入是什么对象,只有具有log方法则就是合法。...而java,c#这类静态强类型语言(当前首先声明c#已经不是纯静态强类型语言,它具有dynamic,表达式,当然这里所说c#是去掉这类特性,或者说C#2.0吧)我们传入对象是必须显示实现该接口类实例...我们还可以显示定义消费者方法,形如  func SomeFunction(logger interface{Log(string)}){ logger.Log(“hello world,...Go还有一种叫做接口,能够容纳万物东西; func log(any interface{}) int { return any.

    81370

    快速入门系列--CLR--01基本概念

    .NET平台用C#这么久,自然会发现其版本很多,相应概念也会很多,常常都是萌萌哒。...C#2.0,主要特性包括泛型、可类型、匿名方法与委托增强、迭代块。小特性有分部类型、静态类、包含不同访问修饰符取值和赋值方法、命名空间别名、pragma指令以及固定大小缓冲器。...C#3.0,主要特性就是LINQ了,包括:Lambda表达式、表达式树、扩展方法。其他特性包括:自动属性、数组和局部变量隐式类型、对象和集合初始化程序、匿名类型。...用于多线程应用程序更新UI。...运行时(CLR)特性 CLR 2.0:支持64位处理器,以及SQL SERVER承载CLR功能,这点其实就是CLR也支持类似于JVM配置功能,包括内存和线程细粒度管理。

    1.3K60

    2-匿名方法

    注意到编译器生成这个方法是个静态方法,看过有些文章说用在实例方法内部匿名方法会产生一个实例方法,说不完整, 我做过几个测试,结果是在前提条件是实例方法,当你用到实例成员时,编译器才会产生实例方法...当然静态方法中使用匿名方法则产生一个"匿名"静态方法,而不会是实例方法了。...2.匿名方法"外部变量" 这个外部变量指的是匿名方法所在方法局部变量,对与匿名方法来说称作外部变量, 改写下上面的代码[只改了function这个方法,其他没动]: private void...,用new一个类实现外部变量传递。 外部变量生命周期被延长了,一直持续到引用该匿名方法委托符合垃圾回收条件为止。对i引用是创建该委托时捕获。...匿名方法不能访问外部范围ref和out参数。 3.总结 总结:C#2.0匿名方法仅仅是编译器简化我们创建委托实例过程,是一种语法糖,与C#1.0写法没有本质区别。

    57960

    带你了解C#每个版本新特性

    隐式类型虽然让编码方便了,但有些不少限制: 被声明变量只能是局部变量,而不能是静态变量和实例字段; 变量声明同时必须初始化初始化值不能为null; 语句中只能声明一个变量; 对象集合初始化器 简化了对象和集合创建...编译器可以判断参数名称是否正确,命名实参可以让我们调用时改变参数顺序。...静态类型当我们要使用程序集中类,要调用类方法,编译器必须知道程序集中有这个类,类里有这个方法,如果不能事先知道,编译时会报错,C#4以前可以通过反射来解决这个问题。...Null条件运算符 C#,一个常见异常就是“未将对象引用到对象实例”,原因是对引用对象没有做判断导致。团队虽然再三强调,但依然会在这个问题上栽跟头。...可以方法写内部方法方法中有时需要在多个代码逻辑执行相同处理,之前做法是写私有方法,现在可以让这个私有方法写在方法内部,提高代码可读性。

    3.5K20

    设计模式专题

    为什么不允许从静态方法访问静态变量 Java,静态方法静态变量/方法属于不同作用域。静态方法属于类作用域,可以访问静态变量和静态方法。...如果允许从静态方法访问静态变量,这个变量究竟属于哪一个实例就不清晰了。这会引起逻辑错误和语义上混乱。 2. 静态方法类加载时候就已经存在了,它不依赖任何实例。...但是非静态变量只有实例创建之后才被初始化。所以如果从静态方法访问静态变量,很可能这个变量还没初始化,会引起NullPointerException。...num++; // 编译错误,无法从静态方法访问静态变量 } } 这个例子,num是非静态变量,只有Test实例创建后才会被初始化。...所以总结来说,不允许从静态方法访问静态变量原因是: 1) 语义混乱:静态变量属于实例,不清晰该访问哪个实例变量 2) 存在指针风险:静态方法类加载时就存在,很可能访问静态变量还未被初始化

    33480

    【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2014年版)

    java,关于数组描述正确是(BD) A. 数组索引下标从1开始 B. 存储在数组当中数据都属于同一数据类型 C....下面关于java说法正确是(ACD) A. java可以使用import语句导入包 B. java可以使用package语句导入包 C....子类会自动拥有父类所有的方法 //自动拥有父类所有的私有方法 D....是对象引用,静态方法没有对象,没有爹啊 所以不能在静态方法引用this(静态方法不能与this同时使用) ----------------------------------------------...Java,如果要在字符串类型对象s="java",得到字符 'v' 出现位置,可使用下面的那个方法?

    1.8K20

    30分钟LINQ教程

    集合初始化器也就罢了,       真的不习惯用对象初始化初始化一个对象!...0         这就是一个自定义静态泛型类型,         此类型静态方法InitInstance对传入参数做了一个判断         如果条件成立,则对传入参数进行操作之后并把它返回...        如果条件不成立,则返回一个值         注意:           [1]             传入参数必须为指定类型,             因为我们使用这个泛型类型时候...、泛型静态定义         扩展方法必须是一个静态方法         扩展方法至少要有一个参数         第一个参数必须附加this关键字作为前缀         ...二:LINQ 1.查询操作符     (1)源起       .net设计者类库定义了一系列扩展方法       来方便用户操作集合对象       这些扩展方法构成了LINQ查询操作符

    78120

    数组、List和ArrayList区别

    list,我们不仅插入了字符串"abc",而且又插入了数字123。这样ArrayList插入不同类型数据是允许。因为ArrayList会把所有插入其中数据都当作为object类型来处理。...正是因为ArrayList存在不安全类型与装箱拆箱缺点,所以C#2.0后出现了泛型概念。而List类是ArrayList类泛型等效类。...它大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键区别在于,声明List集合时,我们同时需要为其声明List集合内数据对象类型。...如果我们往List集合插入string字符"hello world",IDE就会报错,且不能通过编译。...List泛型好处:    通过允许指定泛型类或方法操作特定类型,泛型功能将类型安全任务从您转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确数据类型。

    4.7K30

    .NET那些所谓新语法之二:匿名类、匿名方法与扩展方法

    开篇:在上一篇,我们了解了自动属性、隐式类型、自动初始化器等所谓新语法,这一篇我们继续征程,看看匿名类、匿名方法以及常用扩展方法。虽然,都是很常见东西,但是未必我们都明白其中蕴含奥妙。...C#2.0引入,它终结了C#2.0之前版本声明委托唯一方法是使用命名方法时代。...所得是乃,原来我们一直对集合进行筛选Where()方法居然是扩展方法而不是原生。 ?   ...,找出集合Age>=10数据形成新数据集并输出: ?   ...a) 它必须放在一个嵌套、泛型静态(静态方法);   b) 它至少有一个参数;   c) 第一个参数必须附加 this 关键字;   d) 第一个参数不能有任何其他修饰符(out/ref)

    83630

    深入理解Dart安全

    例如在开发过程,我们可能对某些可变量进行了判断后,编译器依然无法智能判断其,从而无法使用类型方法和属性。 ? 而此时我们确定了此处逻辑变量是非,就可以使用断言 !...3.1.3 late 延迟初始化 该符号执行运行时检查,表示延迟初始化变量,在编码时候可以使当前暂未初始化变量通过静态检查。...从前面可以知道Dart加入安全特性之后对于类型变量需要进行初始化初始化又分为声明默认初始化和延迟初始化。...3.2.1 变量 全局变量和静态变量必须被初始化 由于全局变量和静态变量能够程序任何位置被访问到,引入安全以后,要求这些变量声明时候被初始化,除非声明是可类型。...因此如果此时直接调用map对象索引值属性或者方法,无论键值存在与否,都会报编译错误, ? 如果我们在编码确定该map中键存在并且键所对应值存在,则可以代码中加上一个断言 !

    4.4K51

    C#学习笔记三: C#类型详解..

    值类型不能为null值(类型占不讨论),它会被默认初始化为数值0; 而引用类型默认情况下会被初始化为null值,表示不指向托管堆任何地址。...,即常量值被替换成初始化值;readonly修饰常量则延迟到运行时候 此外const常量既可以声明也可以函数体内,但是static readonly常量只能声明。...4,运算符重载 运算符重载只能用于类或结构,通过类或结构声明一个名为operator x方法,即可完成一个运算符重载。...2、如果存在多个静态类,那么初始化静态成员顺序会根据引用顺序,先引用到先进行初始化,但如果类静态成员初始化依赖于其他类静态成员,则会先初始化被依赖静态成员。   ...3、而带有静态构造函数静态字段,只有引用到时候才进行初始化

    1.3K140
    领券