C# Char到int隐式幕后转换

C# Char到int隐式幕后转换,c#,operators,implicit-conversion,C#,Operators,Implicit Conversion,以下内容在c中有效,因为Char可以隐式转换为int int i = 'a'; 我只是好奇.Net Framework在幕后做了什么,我查看了char和int类型的源代码,但找不到它的编写位置 有人能解释幕后发生了什么吗 正如@shahwat和@joannovo所说,它是将存储在i中的ASCII值 看这个, char value = 'a'; Console.WriteLine(value); Console.WriteLine((int)value);

以下内容在c中有效,因为
Char
可以隐式转换为
int

int i = 'a';
我只是好奇.Net Framework在幕后做了什么,我查看了
char
int
类型的源代码,但找不到它的编写位置


有人能解释幕后发生了什么吗

正如@shahwat和@joannovo所说,它是将存储在i中的ASCII值

看这个,

  char value = 'a';
        Console.WriteLine(value);
        Console.WriteLine((int)value);
        Console.WriteLine(value == 'y');
        Console.WriteLine(value.GetType());
        Console.WriteLine(typeof(char));
        Console.WriteLine((int)char.MinValue);
        Console.WriteLine((int)char.MaxValue);



   Out Put:
    a
    97                  (Integer value of char)
    False
    System.Char
    System.Char
    0                   (MinValue as an integer)
    65535               (MaxValue as an integer)
编辑:

在此microsoft参考资料中,您可以找到每个方法的实现。
只需单击特定的方法,您将被导航到该方法的定义

您还可以添加与您的需求相关的特定VS扩展
例如:

通过这种方式,您将在您的VS中拥有一个功能,您可以通过正确地点击方法并选择“转到定义”来查看实现

对于您的场景

int i ='a';  
从某种意义上讲,这不是一种真正的方法。
要查看其实现,必须使用

我不确定在Resharper的情况下这是否可能,但我刚刚提供了一种方法,您可以通过它来完成这项工作。希望这将对您有所帮助

以下是您的场景的分步指南:
1.在此安装环境(安装VS,Roslyn)

2.启用.NET Framework源代码调试(如果默认情况下未启用)

3.在对账单上加一个断点
int i='a'

4.按f11单步执行此语句后面编写的所有实现

这就是你要做的

重要注意事项:
我想补充一点,如果上述方法不适用于您,那么它将与MSIL相关。因此,在这种情况下,您需要分析Roslyn从该代码生成的内容。

如果是这种情况,那么您也可以使用任何Reflector工具检查它,该工具将显示生成的MSIL。

如@Sadaquat所示,.NET基本类型的源代码位于

您正在讨论的具体实现可能是

它只是返回,它本身只是返回值,因为
char
s在幕后是整数值。

在C#中,我们有一个称为单根统一类型系统的东西。这意味着每个现有类型都是一个根类型的子类型<代码>对象在C#中。因此
char
int
只是
System.char
System.Int32
的缩写(别名)。从非类型化的
对象
字符
(值类型)的转换称为
(非)装箱

与Java相比,这是一个真正的区别,Java中有基本类型
int
char
。。还有
对象
。像
Int
这样的Java类正在包装基元类型

因为在C#中,一切都是一个
对象
(我是对象,因为我们很多!),所有的值类型都实现了
IConvertible
,正如其他人所说

还有一个内部使用最多的enum
TypeCode
,它是分配给像
int
这样的值类型对象的运行时反射信息。
Convert.To
方法正在使用此类型信息来完成其工作

mscorlib(系统名称空间)可以在github上的

此外,由于值类型是完整对象(struct),因此在运行时可以使用大量类型/元信息

C是一个安全的(ER)语言,与C++相比。它不允许不安全的impilict强制转换

char
int
的转换是
加宽
Int
char
大/有更多的空间。投球是安全的

但这就是为什么它不同于Joanvo所写的
(int)
。 这是一个显式的强制转换,无论安全与否,你都在强迫.Net这样做

对于
inti='a'由于加宽,可以进行隐式转换。
但是如果你尝试
charc=42Visual Studio和编译器将不允许此操作。除非您在意识到可能并非来自
int
的所有信息都适合
char

这也是为什么不能在if中使用与布尔(表达式)不同的内容的原因

在C/C++中,您可以编写
if(1){}
if(0){}
。这在C#中是不允许的,在C#中,如果(..==1){}
,则必须编写
。在C/C++中,这通常用于检查指针是否为空

您可以为自己的类型重载
隐式
显式
运算符,这有时很有用。至少知道这是可能的是有用的。

无法说明幕后是如何操作的,但其ASCII值将存储在
i
中。它在C/C++中也以同样的方式工作。我试图查看它的源代码,看看C#编译器开源上到底发生了什么?我猜新的roslyn是开源的。当你找到它时,请指出代码。你的意思是我们看不到dll的源代码???@EhsanSajjad我的意思是visual studio没有内置功能来显示这些dll的源代码,但是有很多软件可以查看dll中写的内容。还可以看到这个@Sadaquat我正在使用Resharper查看
Char
int
types@EhsanSajjad那么,您在使用Resharper时面临什么问题呢?我无法找到实现它的地方