如何返回多种数据类型

时间:2014-04-28 16:16:02

标签: c# .net return-type

我有一个方法,我希望能够返回一个IWebElements列表,一个只列出元素名称或字符串数​​组的列表。是否可以使用一种方法返回多种数据类型?是否有更可行的方法来获得不同的返回类型而不使用一种方法?

/// <summary>
/// Gets all options belonging to this selected tag
/// </summary>
/// <returns>Returns a list of IWebElements</returns>
public List<IWebElement> SelectAllOptions(IWebDriver driver, ref DataObject masterData)
{
    //Get the ID of the dropdown menu
    DatabaseRetrieval.GetObjectRepository(ref masterData);
    var strDropMenuId = masterData.DictObjectRepository["ID"];
    //Find the dropdown menu and pull all options into a list
    try
    {
        var dropMenu = new SelectElement(driver.FindElement(By.Id(strDropMenuId)));
        return dropMenu.Options as List<IWebElement>;
    }
    catch (NoSuchElementException exception)
    {
        masterData.Logger.Log(Loglevel.Error, "Boom: {0}", exception.Message);
    }
    masterData.Logger.Log(Loglevel.Debug, "No options found for DropDownMenu: {0}", strDropMenuId);
    return null;
}

3 个答案:

答案 0 :(得分:9)

您无法返回多种类型。但是你可以:

  1. 创建一个包含所有可能的返回类型的类型
  2. 使用.Net&#39; s Tuple代替
  3. 有参数。
  4. 但这是一个非常糟糕的设计决定,你应该考虑避免它。 (这通常意味着你的方法比它应该做的更多)

答案 1 :(得分:2)

是,但你必须使用out参数,如下所示

 public List<IWebElement> SelectAllOptions(IWebDriver driver, ref DataObject masterData, out SomeType returnResult1, out SomeType returnResult2)

答案 2 :(得分:1)

您可以将返回类型更改为

Dictionary<IWebElement, string>

一旦你编译了IWebElements列表,你就可以简单地将带有IWebElement的相关字符串添加到Dictionary中以返回 - 无论谁调用你的方法都将同时拥有IWebElement和字符串进行处理。

var options = dropMenu.Options as List<IWebElement>;
if (options != null)
{
    var values = options.ToDictionary(option => option, option => option.Text);
    return values;
}