Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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# 如何判断CLR初始化为哪些值类型_C# - Fatal编程技术网

C# 如何判断CLR初始化为哪些值类型

C# 如何判断CLR初始化为哪些值类型,c#,C#,这特别适用于C&NET框架 最好不要在.NET framework中初始化以下类型,因为CLR会为您初始化它们: int, 布尔等 我相信将对象设置为null也是一样的 例如,您不需要这样做,事实上,这是一个性能命中下降在桶或不: int Myvar = 0; 只需要int-Myvar;就这样。CLR会将其初始化为int 很明显,我只是通过编程知道int默认设置为0,bool设置为false 还可以将对象设置为null,因为CLR会为您执行此操作。 但是,您如何知道这些基本类型设置为什么呢。我

这特别适用于C&NET框架

最好不要在.NET framework中初始化以下类型,因为CLR会为您初始化它们:

int, 布尔等

我相信将对象设置为null也是一样的

例如,您不需要这样做,事实上,这是一个性能命中下降在桶或不:

int Myvar = 0;
只需要int-Myvar;就这样。CLR会将其初始化为int

很明显,我只是通过编程知道int默认设置为0,bool设置为false

还可以将对象设置为null,因为CLR会为您执行此操作。 但是,您如何知道这些基本类型设置为什么呢。我试着打开Reflector查看int32和bool,但无法理解默认情况下它们是如何初始化的


我查看了msdn,但也没有看到它。也许我只是错过了它。

一切基本上都归零了,所以就从那里开始吧。Int/Double/etc 0。字符串或其他结构,在其他语言中可能是String.Empty、Guid.Empty等。bool、false 0


这很直观。

一切基本上都归零了,所以就从那里开始吧。Int/Double/etc 0。字符串或其他结构,在其他语言中可能是String.Empty、Guid.Empty等。bool、false 0


这非常直观。

对于C,以下是所有值类型的列表-单击每个值类型的链接以了解其默认值:


对于C,以下是所有值类型的列表-单击每个值类型的链接以了解其默认值:


这可能不太可能,但我得这么说

default( T )

会给你非常准确的结果。

这可能是一个很长的机会,但我要说的是

default( T )

将为您提供非常准确的结果。

您可以轻松制作一个程序,为所有感兴趣的T打印defaultT。

您可以轻松制作一个程序,为所有感兴趣的T打印defaultT。

如果您想要一张表,MSDN是您的朋友:

如果您想要一张表,MSDN是你的朋友:

你想要一个像?

这样的列表吗?你想要一个像?

这样的列表,试着调试这个应用程序,检查一下在你更改它之前的初始值是多少。可能会有更好的答案,但为了结束这个线程,我只是发布了一个快速而肮脏的解决方案


        static void Main(string[] args)
        {
            int iTest;
            string sTest;
            double dTest;
            bool bTest;
            float fTest;

            // stop debugger here
            Console.WriteLine();

            iTest = 0;
            sTest = "";
            dTest = 0.0;
            bTest = false;
            fTest = 0;
        }

尝试调试应用程序,并检查更改应用程序时的初始值。可能会有更好的答案,但为了结束这个线程,我只是发布了一个快速而肮脏的解决方案


        static void Main(string[] args)
        {
            int iTest;
            string sTest;
            double dTest;
            bool bTest;
            float fTest;

            // stop debugger here
            Console.WriteLine();

            iTest = 0;
            sTest = "";
            dTest = 0.0;
            bTest = false;
            fTest = 0;
        }
我们开始吧。简单地说:值类型初始化为0,引用类型初始化为null


我们开始吧。简单地说:值类型初始化为0,引用类型初始化为null

Ok,但它在哪里说明CLR将它们设置为的默认值呢?我不想知道什么是int,uint,我已经知道了。我想问的是,如果您没有明确指定,CLR将在哪里正式指定默认值……这是性能影响的最佳实践。或者如果MSDN说明了如何使用reflector查看如何初始化,如果您没有明确地将其初始化为零,或者您做了什么,等等。我说的是编译器没有明确说明的默认初始化。这是我要找的。好的,但是它在哪里说明CLR设置的默认值呢?我不是要什么int,uint,我已经知道了。我想问的是,如果您没有明确指定,CLR将在哪里正式指定默认值……这是性能影响的最佳实践。或者如果MSDN说明了如何使用reflector查看如何初始化,如果您没有明确地将其初始化为零,或者您做了什么,等等。我说的是编译器没有明确说明的默认初始化。是的,所有值类型都是0。是的,所有值类型都是0。引用,包括字符串引用,都初始化为null。字符串。空!=String不是一个结构,它是一个类。与任何其他引用类型一样,默认值将为null。否则这是正确的:所有值类型都被清零,属于引用类型的任何成员都将为null。引用(包括字符串引用)被初始化为null。字符串。空!=String不是一个结构,它是一个类。与任何其他引用类型一样,默认值将为null。否则这是正确的:所有值类型都被清零,属于引用类型的任何成员都将为null。