【问题标题】:Is there C# shorthand to cast a value to its method's return type?是否有 C# 速记将值转换为其方法的返回类型?
【发布时间】:2021-05-17 20:54:37
【问题描述】:

在 C# 中是否有用于将值转换为其方法的返回类型的简写?例如,在这个方法中,有没有一种简写的方法可以将 GetInt 的返回值转换为其返回类型“int”,而不是离散地输入“int”?

我知道这是一个非常简单的例子,你们中的许多人会说“把 (int) 放在那里会更容易”,但是对于我正在尝试做的一些事情来说,这将是非常好的语法糖是可能的。它与已经存在的“默认”关键字简写非常相似。

// Return type of SomeFunc cannot be changed by me
object SomeFunc();

public int GetInt()
{
    object Value = SomeFunc();
    // I know "Value" should be of type "int" here.
    return ({ReturnType})Value;
}

【问题讨论】:

  • 为什么首先使用object?如果您知道类型,为什么不使用实际类型存储它?
  • @user3163495 然后发布一个现实的例子。有个隐式转换。如果返回类型和实际值之间存在隐式转换,则根本不需要转换。您可以为新类型创建隐式转换运算符。 object 但是,不能隐式转换为其他任何东西。如何将字符串或Image 转换为`int?
  • @PanagiotisKanavos 这没有必要,因为我的问题不是要征求你对我是否应该这样做的意见。
  • @user3163495 相反,非常重要。同样,如果您可以使用隐式强制转换,您将不需要这样的功能。为什么不能使用隐式强制转换?因为您在这方面使用了最严格的类型 - 对象不能隐式转换为其他任何东西。编译器根本没有足够的信息来决定强制转换是否安全
  • Q Is there shorthand in C# for casting a value to its method's return type? A No.

标签: c# shorthand


【解决方案1】:

我可以考虑使用泛型(它不适用于 int,但可以用于自定义类型):

public class Foo { }

public static object Value = null;
public static T GetFoo<T>() where T : Foo
{
    return (T)Value;
}

【讨论】:

  • 这与(int)Value(int?)Value 有何不同?
  • 好吧。您可以作为 Foo 给出的不是精确类型,而是基本类型。我的意思是,在 topicstarter 的案例中,泛型的概念可能值得一看。
【解决方案2】:

这样的功能存在吗? 我不知道。

你能以某种方式添加这样的语法糖吗? 可能是的,但没有一个选项会比显式转换更简单。您可能会丢失一些 IDE 功能。你可能会违背良好的做法。我想反射、装饰器、动态类型、开关表达式等可能在这里有用。

隐式转换? 您始终可以使用派生类隐式转换为其任何基类。一些有用的链接 - casting-and-type-conversionsuser-defined-conversion-operatorstype-testing-and-cast

如果您确定您的对象可以安全地强制转换,您可以使用不会抛出异常的替代语法,Value as int

归根结底,这些都不需要首先考虑,除非有一个用例可以帮助他们BIG TIME。语法糖甚至不接近 IMO 用例,尤其是对于 静态类型 语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多