百科问答小站 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# 中 加入 F# 中的那种 管道运算符 “|>” 会怎么样? 
  C#相对路径 连接Access数据库怎么写?? 
  为什么没有新的支持底层达到类似C++这种程度,而易用性达到C#的语言出现? 
  C#中的迭代器是值类型还是引用类型? 
  C#中的迭代器是值类型还是引用类型? 
  中国有哪些比较出名的C#大佬。? 
  中国有哪些比较出名的C#大佬。? 
  c#表达式目录树的作用是什么?利与弊是什么?应用场景有哪些? 
  C#中的引用类型在堆栈(内存)中是怎么工作的? 
  这篇博文c#比JAVA慢这么多 为什么? 

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





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