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#的匿名类型判断比较的主要内容,如果未能解决你的问题,请参考以下文章