我想让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
}
}
所示的操作,以便可以接受无限数量的参数?
答案 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
作为替代。