【问题标题】:How cast value as tuple (string, bool)如何将值转换为元组(字符串,布尔值)
【发布时间】:2021-10-19 12:52:19
【问题描述】:

这种方式可以转换成元组吗?

(string value, bool flag) value1 = MethodInfo.Invoke(this, param) as (string, bool);

不幸的是它抛出:

"as 运算符必须与引用类型或可空类型一起使用 ('(string, bool)' 是不可为空的值类型)"

只能以这种方式工作:

Tuple<string, bool> value1 = MethodInfo.Invoke(this, param) as Tuple<string, bool>;

【问题讨论】:

  • (string, bool) 表示ValueTuple&lt;string, bool&gt;,而不是Tuple&lt;string, bool&gt;
  • 显然,(因为它会产生编译器错误)不可能“以这种方式转换为元组”。
  • 正常投吧:(string value, bool flag) = ((string, bool))MethodInfo.Invoke(this, param);

标签: c# casting tuples


【解决方案1】:

您可以使用转换表达式进行转换:

(string value, bool flag) tuple = ((string, bool)) MethodInfo.Invoke(this, param);

但与使用as 不同,如果Invoke 的返回值不是(string, bool),这将崩溃。如果你不喜欢这样,你可以使用模式匹配:

if (methodInfo.Invoke(this, param) is (string value, bool flag))
{
    Console.WriteLine($"({value}, {flag})");
    // assign it to a new variable if you want it as one "thing":
    (string value, bool flag) tuple = (value, flag);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2012-04-02
    • 2021-02-23
    • 2018-09-07
    • 1970-01-01
    • 2013-01-24
    • 2016-07-13
    相关资源
    最近更新 更多