匿名类的返回类型是什么我有一个类,它曾经有一个字符串返回类型。现在我发现我需要返回多个字符串。我想返回这样的东西:publicstringTest(){return(new{ID=5,Name="Dave"});这是否可能,如果可能,返回类型是什么?我知道它不是字符串。您返回的对象确实有一个类,但它是匿名的,因此您不能在代码中指定它。您只需将其作为对象引用返回:publicobjectTest(){returnnew{ID=5,Name="Dave"};请注意,匿名类型在方法范围之外是未知的,因此反射是访问它属性的唯一方法的方式。如果你想能够方便地使用返回的对象,你应该声明一个类:publicclassTestResult{publicintID{get;放;}公共字符串名称{得到;放;}}publicTestResultTest(){returnnewTestResult(){ID=5,Name="Dave"};另一种选择是使用现有类(如果它适合您的目的)。KeyValuePair与您正在使用的很接近,但当然这些属性将被命名为Key和Value而不是ID和Name:publicKeyValuePairTest(){returnnewKeyValuePair(5,"Dave");正如其他人所说,这里最重要的一个好方法是制作名义类型。我建议名义类型具有与匿名类型相同的特征;也就是说,您应该考虑使类型不可变,并考虑使它们表现出价值平等。可以将匿名类型作为对象返回,然后使用各种偷偷摸摸的技术使用从别处返回的实例。您可以将对象转换为“动态”对象(在C#4中),然后使用匿名类型的属性,但这很慢并且缺少编译时类型检查。您还可以使用“by-example”技巧,它可以帮助您进行编译时类型检查。但是,此技巧仅在匿名源对象和匿名实例对象来自同一程序集时才有效。staticTCastByExample(objectsource,Texample)其中T:class{returnsourceasT;}staticobjectReturnsAnonymous(){returnnew{X=123};}staticvoidDoIt(){objectobj=ReturnsAnonymous();var示例=新{X=0};varanon=CastByExample(obj,例子);Console.WriteLine(anon.X);//123}看看这有多狡猾?我们使用方法类型推断和局部变量类型推断来告诉编译器“这两个东西是同一类型”。这允许您将匿名类型导出为对象并将它们转换为匿名类型。但你可能不应该;如果你使用这个偷偷摸摸的技巧,那么你应该首先简单地定义名义类型。另外,就像我说的,只有当实例和源对象是在同一个程序集中的代码中创建时,这个技巧才有效;两个不同程序集中的两个“相同”匿名类型不会统一为同一类型。这是不可能的,因为匿名类只在当前上下文中有效。如果你需要返回一个对象,那么你需要创建一个真正的类。我假设您不小心将字符串作为返回类型。匿名类型是直接从对象派生的类类型。您可以将其作为对象的返回类型从方法中返回。一探究竟。不,这是不可能的。您的选择是:为返回值定义一个真正的类,使用System.Tuple,或使用参数(可能是最糟糕的选择)。您可以为此创建一个结构(或类)。publicstructIdAndName{publicintId;公共字符串名称;publicIdAndName(intid,stringname){ID=id;名字=名字;您也可以使用元组(但不推荐这样做,因为属性没有命名。类NewString{publicintID{get;放;}公共字符串名称{得到;放;}}publicNewStringTest(){return(newNewString(){ID=5,Name="Dave"});}?上面是C#学习教程:什么是匿名类的返回类型?如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
