我有以下问题。我有一个具有抽象属性的泛型类,该类本身使用泛型参数:
library(rjson)
library(magrittr)
df<-mtcars[1:4,1:4]
apply(df, 1, toJSON) %>%
setNames(paste0("Car: ", names(.), "\n")) %>%
gsub("(\\{|\\})", "", .) %>% # Remove braces
gsub(",\"", "\n", .) %>% # replace ," with line break
gsub("\"", "", .) %>% # replace double quotations (could be problematic if you have text data with double quotes)
gsub("[:]", ": ", .) %>% # add a space after colons
paste0(names(.), .) %>% # put the name of the car above its data
paste0(collapse = "\n\n") %>% # bring them into one string
cat()
想象一下,现在我有一个类,该类具有创建abstract class Deserializer<T>
{
T abstract Deserialize<T>(Node node);
}
class IntDeserializer:Deserializer<int>
{
int override Deserialize(Node node){....}
}
class StringDeserializer:Deserializer<String>
{
string override Deserialize(Node node){....}
}
internal struct Command<T>
{
public IReadOnlyList<Component<T>> Components { get; }
public Deserializer<T> Deserializer { get; }
public Command(IEnumerable<Component<T>> components)
{
this.Deserializer = components.First().AsDeserailizer;
this.Components = components.Skip(1).ToArray();
}
}
的方法。我想以某种方式将此Command<T>
专用字段存储在数据结构中,以便以后可以检索并使用Deserializer
方法。
Deserialize
答案 0 :(得分:1)
您可以使用以下代码访问Deserialize()
方法
只需列出dynamic
或object
class A
{
List<dynamic> deserializers = new List<dynamic>();
//OR
//List<object> deserializers = new List<object>();
string Method1()
{
Command<string> cmd = new Command<string>();
//var a = (T)Convert.ChangeType(cmd.Deserializer, typeof(T));
this.deserializers.Add(cmd.Deserializer);
}
int Method2()
{
Command<int> cmd = new Command<int>();
this.deserializers.Add(cmd.Deserializer);
}
void Execute()
{
string result = this.deserializers[0].Deserialize();
int result2 = this.deserializers[1].Deserialize();
}
}
编辑:
class A<T>
{
List<Deserializer<T>> deserializers = new List<Deserializer<T>>();
string Method1()
{
Command<string> cmd = new Command<string>();
var a = (Deserializer<T>)Convert.ChangeType(cmd.Deserializer, typeof(T));
this.deserializers.Add(a);
//return "";
}
int Method2()
{
Command<int> cmd = new Command<int>();
var a = (Deserializer<T>)Convert.ChangeType(cmd.Deserializer, typeof(T));
this.deserializers.Add(a);
//return 0;
}
void Execute()
{
Node node1 = new Node();
string result1 = (string)Convert.ChangeType(this.deserializers[0].Deserialize(node1), typeof(T));
Node node2 = new Node();
int result2 = (int)Convert.ChangeType(this.deserializers[1].Deserialize(node2), typeof(T));
}
}
尝试一次可能对您有帮助