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#中的表现是一致的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值