百科问答小站 logo
百科问答小站 font logo



C# 方法能返回结构吗? 第1页

  

user avatar   rednaxelafx 网友的相关建议: 
      

感觉题主实际上想要用C#写一个方法返回一个discrimated union。

因为题主强调的是:

用来返回不同类型的out参数

而不是返回多个out参数。

所以题主原本想像的场景大概是这样的:

       enum Mode {   GetInt,   GetLong,   GetDouble }  static void Foo(Mode mode, out int i, out long l, out double d) {   switch (mode) {   case Mode.GetInt:     i = 42;     l = 0L;     d = 0.0;     break;   case Mode.GetLong:     i = 0;     l = 42L;     d = 0.0;     break;   case Mode.GetDouble:     i = 0;     l = 0L;     d = 42.0;     break;   default:     // ShouldNotReachHere     i = 0;     l = 0L;     d = 0.0;     break;   }   return; }      

而题主想要把它写成:

       enum Mode {   GetInt,   GetLong,   GetDouble }  static MyValue Bar(Mode mode) {   MyValue val = new MyValue();   val.mode = mode;   switch (mode) {   case Mode.GetInt:     val.i = 42;     break;   case Mode.GetLong:     val.l = 42L;     break;   case Mode.GetDouble:     val.d = 42.0;     break;   default:     // ShouldNotReachHere     val.l = 0L;     break;   }   return val; }      

这当然可以。这个MyValue的定义可以如下:

       [StructLayout(LayoutKind.Explicit)] struct MyValue {   [FieldOffset(0)]   public Mode mode;    [FieldOffset(8)]   public int i;    [FieldOffset(8)]   public long l;    [FieldOffset(8)]   public double d; }      

user avatar   Ivony 网友的相关建议: 
      

事实上在最新的C#标准里面新增了一个返回多个值的语法,用的就是值类型元组(结构)。所以,你的想法是对的。


在C# 7里面,返回和接收多个返回值可以这么写:

       return ( a, b );  ( var a, var b ) = SomeMethod();     



  

相关话题

  C# 引用类型相比于值类型意义何在? 
  为什么一个简单的闭包,C#要设计得如此巨大? 
  C#中的迭代器是值类型还是引用类型? 
  c#表达式目录树的作用是什么?利与弊是什么?应用场景有哪些? 
  c#多播或event监听太多后gc和时间都会爆炸,那么比起List<Action>存在的意义是什么? 
  重度强迫,只认 C#,其它不学不问,该如何是好? 
  c#启动有什么好的优化技巧? 
  c#的接口到底实际中如何使用? 
  C#什么情况下用值类型什么时候用引用类型? 
  c#的接口到底实际中如何使用? 

前一个讨论
iPhone 7 裸奔两天后屏幕就划伤了,不是说能防划伤吗?
下一个讨论
实际开发中ref、out参数有多大作用?





© 2024-07-01 - tinynew.org. All Rights Reserved.
© 2024-07-01 - tinynew.org. 保留所有权利