百科问答小站 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# 的 装箱 和 拆箱 成本有多高? 
  微软开放.net框架源代码后,未来的发展有哪些可期待的? 
  为什么没有新的支持底层达到类似C++这种程度,而易用性达到C#的语言出现? 
  如何评价即将发布的 C# 9.0? 
  中国有哪些比较出名的C#大佬。? 
  对于C#与C++之间的数据传输,用GCHandle或Marshal是否就是最好的方案了? 
  如何用c#实现一个没有装箱的通用容器? 
  微软开放.net框架源代码后,未来的发展有哪些可期待的? 
  C#相对路径 连接Access数据库怎么写?? 
  .net做的软件导出excel时,如果有两个版本的office,能否修改导出时调用的office版本? 

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





© 2024-12-18 - tinynew.org. All Rights Reserved.
© 2024-12-18 - tinynew.org. 保留所有权利