gpt4 book ai didi

c# - 匿名类的返回类型是什么

转载 作者:行者123 更新时间:2023-11-30 13:28:18 29 4
gpt4 key购买 nike

我有一个曾经有一个字符串返回类型的类。现在我发现我需要返回的不仅仅是一个字符串。我正在考虑返回如下内容:

public string Test()
{
return ( new { ID = 5, Name= "Dave" } );
}

这是否可能?如果可能,那么返回类型是什么?我知道这不是字符串 ..

最佳答案

正如其他人所说,这里最好的做法是制作一个标称类型。我建议名义类型具有与匿名类型相同的特征;也就是说,您应该考虑使类型不可变 并考虑使其表现出值相等

可以将匿名类型作为对象返回,然后使用各种偷偷摸摸的技术在别处返回的实例。您可以将对象转换为“动态”(在 C# 4 中),然后使用匿名类型的属性,但这很慢并且缺少编译时类型检查。

您还可以使用“按示例强制转换”技巧,它确实可以让您进行编译时类型检查。但是,只有当匿名源对象和匿名示例对象来自同一个程序集时,该技巧才有效

static T CastByExample<T>(object source, T example) where T : class
{
return source as T;
}

static object ReturnsAnonymous() { return new { X = 123 }; }

static void DoIt()
{
object obj = ReturnsAnonymous();
var example = new { X = 0 };
var anon = CastByExample(obj, example);
Console.WriteLine(anon.X); // 123
}

看看这有多狡猾?我们使用方法类型推断和局部变量类型推断来告诉编译器“这两个东西是同一类型”。这使您可以将匿名类型导出为对象并将其转换回匿名类型。

但是你可能不应该这样做;如果您要诉诸这种偷偷摸摸的技巧,那么您应该首先简单地定义一个名义类型。另外,就像我说的,只有当 examplesource 对象是在同一个程序集中的代码中创建时,这个技巧才有效;两个不同程序集中的两个“相同”匿名类型不会统一为同一类型。

关于c# - 匿名类的返回类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6466054/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com