侧边栏壁纸
博主头像
Tony's Blog博主等级

行动起来,coding

  • 累计撰写 83 篇文章
  • 累计创建 58 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录
c# go

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

Tony
2024-02-23 / 0 评论 / 0 点赞 / 4 阅读 / 6372 字

本文链接: https://blog.csdn.net/lishuangquan1987/article/details/129316264

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))
}

运行结果:

在这里插入图片描述

1-isym.png

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))
}

运行结果:

2-cwat.png

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
}

运行结果:

3-ktsk.png

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();
        }
    }

输出结果:

4-xgho.png

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; }
    }

运行结果:

5-qfof.png

由以上测试结果得出:

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

0

评论区