百科问答小站 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#已经没落” 这种说法? 
  C#中struct和class的使用区别是什么? 
  C# 中如何有效地释放内存? 
  如何评价即将发布的 C# 9.0? 
  C# 中如何有效地释放内存? 
  中国有哪些比较出名的C#大佬。? 

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





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利