如何从C#中传递的对象中检索单个值?

时间:2018-12-05 16:50:51

标签: c# object parameter-passing optional-parameters

在使用这种方法之前,我有一些方法包含四个或五个参数,因此我想将其中的大多数浓缩为一个对象。 TestOptions()对象具有其他可选值,例如“名称”或“位置”。

我在分别检索对象值时遇到麻烦。如何在Setup()方法中使用TestOptions()对象的指定值?

    public async Task Test_One()
    {
        await Setup(new TestOptions() { brand = "Brand1", id = 10 }, new List<string> { "user1@abc.com" });
    }

    public async Task Setup(object values, List<string> emailAddresses)
    {
        //Do work here that uses 'brand' and 'id' individually
    }

public class TestOptions
{
    public string brand
    {
        get; set;
    }

    public string id
    {
        get; set;
    }
}

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使Setup的签名采用强类型对象:

public async Task Setup(TestOptions values, List<string> emailAddresses)
{
    //Do work here that uses 'brand' and 'id' individually
    var brand = values.brand;
}

或强制转换值:

public async Task Setup(object values, List<string> emailAddresses)
{
     //Do work here that uses 'brand' and 'id' individually
     var typed = (TestObject)values;
     var brand = typed .brand;
}

答案 1 :(得分:0)

我不知道我是否了解您的问题,但是如果要检索TestOptions的属性,请抛出一个对象变量,您需要首先对其进行强制转换,如下所示:

string brand = ((TestOptions)values).brand;
string id = ((TestOptions)values).id;
// etc...

无论如何,我建议您通过接收TestOption值而不是通用对象来更改方法,或者可能为每个不同的对象创建同一方法的不同实现。