百科问答小站 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# 中 加入 F# 中的那种 管道运算符 “|>” 会怎么样? 
  c# 的 装箱 和 拆箱 成本有多高? 
  C# 的扩展方法是否是一个糟糕的设计? 
  C#是如何将不合理的数字转换为Enum类型的? 
  C# 中如何有效地释放内存? 
  c#关于异步编程? 
  如何用c#实现一个没有装箱的通用容器? 
  微软开放.net框架源代码后,未来的发展有哪些可期待的? 
  中国有哪些比较出名的C#大佬。? 

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





© 2024-06-29 - tinynew.org. All Rights Reserved.
© 2024-06-29 - tinynew.org. 保留所有权利