【问题标题】:How do you cast an object to a Tuple?如何将对象转换为元组?
【发布时间】:2013-01-14 08:36:00
【问题描述】:

我创建了我的元组并将其添加到组合框:

comboBox1.Items.Add(new Tuple<string, string>(service, method));

现在我希望将项目转换为元组,但这不起作用:

Tuple<string, string> selectedTuple = 
                   Tuple<string, string>(comboBox1.SelectedItem);

我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net combobox tuples


    【解决方案1】:

    施法时不要忘记()

    Tuple<string, string> selectedTuple = 
                      (Tuple<string, string>)comboBox1.SelectedItem;
    

    【讨论】:

    • 谢谢!我迷失在所有的括号中。计时器到期后,我会将您的帖子标记为最佳答案!
    • 或元组 selectedTuple = (comboBox1.SelectedItem as Tuple);
    • @TYY 如果由于某种意外原因它不是元组,它将隐藏错误。如果您知道某事属于 T 类型,则使用强制转换,如果您知道某事可能属于 T 类型但它是有效的行为,即使它不使用 as 和 null 测试
    • @Rune FS 好吧,这取决于他如何使用 tuple 对象,检查 null 可能比抛出异常更有意义。即使我知道塞德里克的回答绝对正确,也只是给他另一个选择。
    • @TYY 是的,这正是我所说的,如果他知道它应该始终是指定的元组类型转换是 适当的选项(因为如果转换失败,它是然后根据定义是一种例外情况)如果该对象在法律上可以是其他东西asis the 适当的选项
    【解决方案2】:

    从 C# 7 开始,您可以非常简单地进行转换:

    var persons = new List<object>{ ("FirstName", "LastName") };
    var person = ((string firstName, string lastName)) persons[0];
    
    // The variable person is of tuple type (string, string)
    

    请注意,两个括号都是必需的。第一个(从内到外)是因为元组类型,第二个是因为显式转换。

    【讨论】:

    • 我宁愿使用:var person = ((string, string)) persons[0];
    • 是的,这也是可能的,但在这种情况下,您需要使用 person.Item1person.Item2 而不是 person.firstNameperson.lastName
    【解决方案3】:

    您的语法错误。应该是:

    Tuple<string, string> selectedTuple = (Tuple<string, string>)comboBox1.SelectedItem;
    

    或者:

    var selectedTuple = (Tuple<string, string>)comboBox1.SelectedItem;
    

    【讨论】:

      猜你喜欢
      • 2015-10-31
      • 2015-11-07
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多