有没有一种方法可以从一个方法返回多个整数? [复制]

2024-04-15

我有一个这样的方法:

private double GetHeight()
{
    return 2;
}

但我希望能够返回两个不同的数字,例如 2 和 3。有什么方法可以在 C# 中做到这一点吗?


Yes ValueTuple https://learn.microsoft.com/en-us/dotnet/csharp/tuples?view=netframework-4.7.2 / 命名元组(在 C# 7.0 中可用)。优点是最简洁、不可变并且易于构建。

ValueTuple 结构体具有名为 Item1、Item2、Item3 等的字段, 类似于现有元组类型中定义的属性。

然而,当你初始化一个元组时,你可以使用新的语言 为每个字段提供更好的名称的功能。这样做会创建一个 命名元组。命名元组仍然具有名为 Item1、Item2 的元素, 第3项等等。但它们也有这些元素的同义词 你所命名的。您可以通过指定名称来创建命名元组 对于每个元素。

private (double first, double second) GetHeight()
{
   return (1,2);
}

...

var result = ViaNamedValueTuple();
Console.WriteLine($"{result.first}, {result.second}");

var (first, second) = ViaNamedValueTuple();
Console.WriteLine($"{first}, {second}");

经典元组

C# 元组类型 https://learn.microsoft.com/en-us/dotnet/csharp/tuples

.NET Framework 已经有了通用的 Tuple 类。这些课程, 然而,有两个主要限制。其一,名为的元组类 它们的属性 Item1、Item2 等等。这些名字没有 语义信息。使用这些元组类型不会启用 传达每个属性的含义。新语言 功能使您能够声明和使用语义上有意义的名称 对于元组中的元素。

public Tuple<int, int> ViaClassicTuple()
{
   return new Tuple<int, int>(1,2);
}

...

var tuple = ViaClassicTuple();
Console.WriteLine($"{tuple.Item1}, {tuple.Item2}");

经典结构

结构体(C# 参考) https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/struct

结构类型是一种值类型,通常用于封装 一小组相关变量,例如a的坐标 矩形或库存中物品的特征。

public struct ClassicStruct
{
   public int First { get; set; }
   public int Second { get; set; }
   public ClassicStruct(int first, int second)
   {
      First = first;
      Second = second;
   }
}

...

public ClassicStruct ViaClassicStruct()
{
   return new ClassicStruct(1, 2);
}

... 

var classicStruct = ViaClassicStruct();
Console.WriteLine($"{classicStruct.First}, {classicStruct.Second}");

只读结构体

只读(C# 参考) https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/readonly#readonly-struct-example

结构体定义上的 readonly 修饰符声明该结构体 是不可变的。结构体的每个实例字段都必须被标记 只读,如下例所示:

public readonly struct ReadonlyStruct
{
   public int First { get; }
   public int Second { get; }
   public ReadonlyStruct(int first, int second)
   {
      First = first;
      Second = second;
   }
}

...

public ReadonlyStruct ViaReadonlyStruct()
{
   return new ReadonlyStruct(1, 2);
}

...


var readonlyStruct = ViaReadonlyStruct();
Console.WriteLine($"{readonlyStruct.First}, {readonlyStruct.Second}");

简单类

类(C# 编程指南) https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/classes

定义为类的类型是引用类型。在运行时, 当您声明引用类型的变量时,该变量包含 值 null 直到您通过以下方式显式创建该类的实例 使用 new 运算符,或为其分配一个兼容类型的对象 可能是在其他地方创建的

public class SomeClass
{
   public int First { get; set; }
   public int Second { get; set; }
   public SomeClass(int first, int second)
   {
      First = first;
      Second = second;
   }
}

...

public SomeClass ViaSomeClass()
{
   return new SomeClass(1, 2);
}

...


var someClass = ViaSomeClass();
Console.WriteLine($"{someClass.First}, {someClass.Second}");

输出参数

out 参数修饰符(C# 参考) https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier

out 关键字导致参数通过引用传递。它使 形式参数 参数的别名,必须是 多变的。换句话说,对参数的任何操作都是在 的论点。它类似于 ref 关键字,只不过 ref 需要 在传递变量之前对其进行初始化。它也像 in 关键字,但 in 不允许被调用的方法 修改参数值。要使用 out 参数,这两种方法 定义和调用方法必须显式使用out关键字。

public bool ViaOutParams(out int first, out int second)
{
   first = 1;
   second = 2;
   return someCondition;
}

...

if(ViaOutParams(out var firstInt, out var secondInt))
   Console.WriteLine($"{firstInt}, {secondInt}");

输出值元组

public bool ViaOutTuple(out (int first,int second) output)
{
   output = (1, 2);
   return someCondition;
}

...

if (ViaOutTuple(out var output))
   Console.WriteLine($"{output.first}, {output.second}");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有一种方法可以从一个方法返回多个整数? [复制] 的相关文章

随机推荐

  • 在java中注入击键

    我正在寻找一种将击键注入操作系统键盘输入缓冲区的方法 就像当您单击一个按钮时 程序会插入一个 或多个 键盘敲击 我想在java中执行此操作 因为我想在 win linux和osx 中运行它 我想我必须利用 JNI 有人有什么想法吗 感谢所有
  • 向 Qt 对话框添加最小化按钮?

    我创建了一个QDialog基于使用 Qt Creator 的应用程序 除了对话框没有最小化按钮之外 一切都很好 我怎样才能添加一个 设计器中有我可以设置的属性吗 您无法自己添加最小化按钮 因为它是由窗口管理器处理的 您可以使用窗口管理器提示
  • Devise_token_auth 冲突?

    使用默认的 api 标签在 Rails 5 中创建了一个新的 API 并使用命令安装了 devise token auth gemrails generate devise token auth install User auth 关于做r
  • JavaScript 未知数量的参数

    在我的项目中 我注册了不同的函数 具有不同数量的参数 作为许多事件的侦听器 当事件发生时 我需要触发相关的函数 我接收以数组形式传递给侦听器方法的参数 而侦听器函数需要每个单独的参数 所以 我正在这样做 但我不喜欢这种方法 想知道是否有一种
  • 修改 Silverlight 3 中新 Popup 控件 (ChildWindow) 的外观/行为

    我想删除 Silverlight 3 中新 Popup 控件的灰色标题 如果这可能的话有什么想法吗 很简单 只需编辑默认的 ChildWindow 样式即可 在 Blend 3 中创建一个 ChildWindow 类型的新项目 右键单击项目
  • 在 Linux 中何时使用 pthread_exit() 以及何时使用 pthread_join()?

    我是 pthreads 的新手 我正在尝试理解它 我看到了一些例子 如下所示 我可以看到main 被 API 阻止pthread exit 而且我见过 main 函数被 API 阻塞的例子pthread join 我无法理解何时使用什么 我
  • Java 调试器:是否可以有选择地挂起线程?

    在我过去作为 C C 程序员的生活中 在某些平台和调试器组合上可以选择性地挂起线程 到达断点后 可以发出命令 或单击 GUI 中的内容 来冻结 解除冻结 挂起 唤醒 线程 在执行进一步的步骤 下一步 运行 继续命令时 挂起的线程将不会执行任
  • 使用 AWS codedeploy 部署 Nodejs 实例的 NPM 问题

    我目前正在尝试通过 Github 和 AWS Codedeploy 将 Nodejs 应用程序自动部署到 EC2 实例 我已按照以下指示进行操作here http docs aws amazon com codedeploy latest
  • Array.size() 与 Array.length

    两者有什么区别 所以我知道array size 是一个函数 而array length是一个属性 是否存在使用其中一种而不是另一种的用例 是不是效率更高 我会想象 length明显更快 因为它是一种属性而不是方法调用 为什么人们会使用较慢的
  • Wordpress Multisite - 无法访问子文件夹站点仪表板

    我是 WordPress 多站点新手 我发现了一个奇怪的问题 我已经安装了 WordPress 的新实例 并使用子文件夹启用了多站点 唯一的问题是当我创建新网站时 它无法正确显示 并且我无法访问新网站仪表板 我已将这些行添加到wp conf
  • 如何在 Power Query M 中发表评论?

    有没有办法注释 M 代码 注释掉代码行或代码块 M 支持两种不同类型的注释 单行注释可以以 开头 您可以使用 注释掉多行或注释掉行中间的文本 例如 1 some comment 2 如果注释位于行尾 则它们似乎会在公式栏中消失 但它们仍然存
  • postgresql 加密

    我有 oracle 数据库可以转移到新的 postgresql 服务器 某些表具有敏感字段 并且这些表均通过 DBMS OBFUSCATION TOOLKIT DESENCRYPT DESENCRYPT 进行加密 问题就在这里 postgr
  • PostgreSQL 和 C# 数据类型

    我搜索了 PostgreSQL 和 C 之间的类型转换表 但没有找到任何内容 如果有时间 我会研究上表上的空单元格 但如果您知道包含这些信息的网页 我非常适合您的帮助 Postgre Type gt C Type bigint gt Int
  • 当 EnableSessionState 为 ReadOnly 时更改会话状态

    我有一个 旧的 ASP NET WebForms 项目 并且我想尽可能将 EnableSessionState 设置为 ReadOnly 以防止会话锁阻止单个用户并发页面加载 在某些页面上 我实际上确实想写入会话状态 通常 只需将那些需要写
  • 在 Chrome 中单步执行 JavaScript 断点时如何查看 DOM?

    在 Chrome DevTools 中 在 源 选项卡中调试 JavaScript 时 在 JS 代码中添加 debugger 行 然后使用 F10 F11 单步执行代码 如何在单步执行代码的同时查看 DOM 如果我的 JS 正在操作 DO
  • 在 onResume/onPause 中重新启动/暂停线程

    我有一个使用 SurfaceView 实现来显示对象的游戏 我有一个线程 它会不时地将 SurfaceView 绘制到屏幕上 游戏正在完全运行 不幸的是 它需要在游戏中断时具有暂停功能 好吧 我知道我需要操纵onResume and onP
  • 从“git diff”中排除单个提交

    大家早 假设我有一系列提交 如下所示 abc000 def111 abc222 def333 abc444 def555 我知道我可以使用 git diff c binary abc000 def555 gt tmp abc000 def5
  • 自动崩溃时重新启动 Docker 容器

    如果容器自动崩溃 我想重新启动它 我不知道该怎么做 我有一个脚本 docker compose deps yml 其中包含 elasticsearch redis nats 和 mongo 我在终端中运行它来进行设置 docker comp
  • 获取Web服务的内容

    我有一个像这样的网址here http www myserver com myservice php param foobar 当我在 Safari 的地址栏中输入该内容时 我会看到类似 错误 或 正常 的结果 那么 如何从代码中正确调用该
  • 有没有一种方法可以从一个方法返回多个整数? [复制]

    这个问题在这里已经有答案了 我有一个这样的方法 private double GetHeight return 2 但我希望能够返回两个不同的数字 例如 2 和 3 有什么方法可以在 C 中做到这一点吗 Yes ValueTuple htt