`this [object Key]`不限数量的参数

时间:2019-01-29 08:21:23

标签: c# this

我想让CurrentProcess [FileName=ABC_File, Action=Transfer, Status=Done, StartDate=Tue Jan 29 13:09:00 IST 2019] CurrentProcess [FileName=ABC_File, Action=Transfer, Status=Done, StartDate=Tue Jan 29 13:09:00 IST 2019] CurrentProcess [FileName=ABC_File, Action=Transfer, Status=Done, StartDate=Tue Jan 29 13:03:00 IST 2019] 接受无限数量的参数,我该怎么做?

例如,我有一个代码-

this[object key]

如何执行public class Response { public object this[object Key] { get { return "Hello"; } } } public class Program { static async Task Main(string[] args) { Response response = new Response(); var test = response["fds"]; //I can do this var test2 = response["fds"]["dsa"]; //But this is how I cannot do } } 所示的操作,以便可以接受无限数量的参数?

2 个答案:

答案 0 :(得分:0)

如果返回的对象不具有此类属性。您必须将其投射到某种对象上

public class Response : IResponse
{
    public object this[object Key]
    {
        get
        {
            return "Hello";
        }
    }
}
public interface IResponse
{
    object this[object Key] { get; }
}
public class Program
{
    static async Task Main(string[] args)
    {
        Response response = new Response();

        var test = response["fds"]; //I can do this
        var test2 = (response["fds"] as IResponse)?["dsa"]; //But response["fds"] have to be IResponse if it's not you will get null
    }
}

答案 1 :(得分:0)

要匹配您的语法,您可能想返回dynamic而不是object(因此您可以编写第二个索引调用而无需仪式)。当您返回旨在允许更深入访问的内容时,您将返回类似Response的内容:

public class Response
{
    public dynamic this[object Key]
    {
        get
        {
            if(Key is int)
            {
               return "Hello";
            }
            else
            {
                return new Response();
            }
        }
    }
}

您希望对这些嵌套对象如何相互关联有一个更清晰的了解,因此可能不需要new,或者可能是其他一些类公开了与{{1}类似的索引器}。

此行,使用上面的定义:

Response

应该产生“你好”。

由于您提到JSON.Net,因此它的方法不使用var test3 = response["fds"]["dsa"]["jkl"][5]; -但它的JToken.Item索引器始终返回相同类型的对象-另一个dynamic。这就是您选择解决问题的方式,但是您将不再返回普通的JToken作为替代。