【问题标题】:Is it possible to add methods into variables [duplicate]是否可以将方法添加到变量中[重复]
【发布时间】:2021-06-25 13:56:22
【问题描述】:

是否可以将方法添加到变量中,例如。

public static int BoolToInt(bool entry)
{
    if(entry == true) { return 1; }
    else { return 0; }
}

bool example = checkbox1.Checked;
RandomMethod(example.BoolToInt());

着眼于尽量减少视觉混乱并提高可读性(我发现RandomMethod(example.BoolToInt(), example2.BoolToInt());RandomMethod(BoolToInt(example), BoolToInt(example2)); 更容易阅读)我想知道这是否可能,经过研究我发现了这个Can you assign a function to a variable in C#?,感觉这是正确的方向,但是当我想添加它时,它使变量成为方法。我是新手,所以我无法从那里去我想要的东西,也不知道是否有办法做到这一点,也找不到太多阅读 Microsoft Docs 的内容。

【问题讨论】:

  • 您正在寻找extension methods
  • 请注意,如果您决定对原始类型使用扩展方法(这是一种可疑的做法),请确保将包含类设置为 internal。否则你可能会用他们没想到的扩展方法来打扰很多代码。
  • 哦,太好了,谢谢,我需要注意任何性能问题,或者与定期调用方法基本相同?
  • 扩展方法只是一个静态方法,其性能与普通静态方法完全相同。
  • 如果我们想转换,为什么不转换:Convert.ToInt32(example)Convert 很明显,当 BoolToInt 的目的不是那么清楚时

标签: c# variables methods


【解决方案1】:

您可以使用 C# 扩展方法通过为扩展类型声明新方法来“扩展”现有类型。

static class BoolExtensions {
  public static int ToInt(this bool value) {
    return value ? 1 : 0;
  }
}

那么你可以使用 as:

var example = true;
var exampleAsInt = example.ToInt();

参考:

【讨论】:

  • public static int ToInt(this bool value) => Convert.ToInt32(value);
  • @DmitryBychenko (int) value 也足够了。我只是想在扩展部分提供帮助,问题不是关于布尔到 int 的转换。
  • 是的,它是关于做扩展的,使用这种转换是一个不好的例子
猜你喜欢
  • 2014-03-24
  • 2010-11-07
  • 2020-06-08
  • 2012-08-05
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
相关资源
最近更新 更多