go与C#的匿名类型判断比较

Posted lishuangquan1987

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go与C#的匿名类型判断比较相关的知识,希望对你有一定的参考价值。

go的便捷之处在于可以申明匿名类型对象,当然C#也可以,但是go中匿名类型对象更方便,可以在字段上打标签,定义json序列化内容,更灵活。
本文测试环境:

  • go1.19.3
  • .Net Framework 4.7.2

go

go中具有相同字段的匿名对象是否是同一个类型?

答案:是同一个类型

package main

import (
	"fmt"
	"reflect"
)

func main() 
	var p1 any = struct 
		Name string
		Age  int
	
	p2 := struct 
		Name string
		Age  int
	
	fmt.Println(reflect.TypeOf(p1) == reflect.TypeOf(p2))

运行结果:

go中具有相同字段的匿名对象,但是标签不同,是否是同一个类型?

答案:不是同一个类型

package main

import (
	"fmt"
	"reflect"
)

func main() 
	p1 := struct 
		Name string `json:"name"`
		Age  int
	
	p2 := struct 
		Name string
		Age  int
	
	fmt.Println(reflect.TypeOf(p1) == reflect.TypeOf(p2))

运行结果:

go中的匿名类型和非匿名结构体具有相同的字段,是否属于同一个类型?

答案:不属于同一个类型

package main

import (
	"fmt"
	"reflect"
)

func main() 
	p1 := struct 
		Name string
		Age  int
	
	p2 := Person
	fmt.Println(reflect.TypeOf(p1) == reflect.TypeOf(p2))


type Person struct 
	Name string
	Age  int


运行结果:

C#

c#中具有相同字段的匿名对象是否是同一个类型?

答案:是同一个类型

internal class Program
    
        static void Main(string[] args)
        
            var p1 = new
            
                Name = "tony",
                Age = 18
            ;
            var p2 = new
            
                Name = "tony",
                Age = 18
            ;
            Console.WriteLine(p1.GetType()==p2.GetType());
            Console.Read();
        
    

输出结果:

c#中的匿名类型和非匿名结构体具有相同的字段,是否属于同一个类型?

答案:不属于同一个类型

internal class Program
    
        static void Main(string[] args)
        
            var p1 = new
            
                Name = "tony",
                Age = 18
            ;
            var p2 = new Person()
            
                Name = "tony",
                Age = 18
            ;
            Console.WriteLine(p1.GetType()==p2.GetType());
            Console.Read();
        
    
    public class Person
    
        public string Name  get; set; 
        public int Age  get; set; 
    

运行结果:

由以上测试结果得出:
如果两个匿名对象的字段数量和类型是完全一样的,那么他们是同一个类型,这在go和C#中的表现是一致的

以上是关于go与C#的匿名类型判断比较的主要内容,如果未能解决你的问题,请参考以下文章

Golang与C#之switch区别

golang结构体组合与“多态” 2021-08-06

golang的interface

go判断interface类型及类型转换

go下载与环境配置

golang中级进阶(二):结构体