2013-07-27 145 views
-3

如果列表/字典(如Dictionary<string, T>)存在T(如果它可以是任何内容并且没有约束),那么它等效于什么?如何存储类型T

我有一个形式为Method<T>(string someString)的方法。在这种方法中,我需要保存字符串和T供以后使用。另一种方法(来自另一个API)将使用字符串和T.这将发生在稍后的Task.Run中(我认为这在此不重要)。

<T>在这个类的定义,因为类本身不存储任何有关T的任何东西。

编辑:这是流量:

某处在我的代码:

public void MyMethod<T>(string someString) { ... }

后来,如果某些条件得到满足,其他地方在我的代码(不一定在类的MyMethod的)

public void SomeMethodFromAnotherAPI<T>(string someString)

+0

我不知道,SE的东西使用。它似乎编辑了Method(string someString)中的,它改变了含义。 – RecursiveCall

+2

将它添加为代码使用反引号 - 请参阅我的编辑:) – DaveShaw

+0

当你说“供以后使用”,你的意思是在一个静态变量?另外,如果你先用''调用方法,然后用''调用方法,那么这两个数据结构应该共享还是分开?你能否提供一个你如何看API语法的例子,即。你想使用什么方法,以及他们应该做什么? –

回答

1
void TheirMethod<T>(string text) { } 

void MyMethod<T>(string text) 
{ 
    Action action =() => TheirMethod<T>(text); 
    // you can now return the action, 
    // construct a thread with it 
    // add it to a List... 
    var thread = new Thread(new ThreadStart(action)); 
    thread.Start(); 
} 
0

我会建议寻找到泛型在C#。这就是C#如何处理模板。

Introduction to Generics.

你也可能试图简单地存储类型。在这一点上,您需要使用Type classGetType方法或TypeOf关键字来获取类型。

+0

或'typeof(T)'? – YK1

+0

没错,这也会起作用。我会记下它。谢谢。 –

1

你的意思是这样的:(?元)

Dictionary<string, Type> dict = new Dictionary<string, Type>(); 

public void Method<T>(string text) 
{ 
    dict.Add(text, typeof(T)); 
} 

public void Usage() 
{ 
    Method<string>("string"); 
    Method<IList>("list"); 
    Method<Action>("action"); 
} 
+0

您究竟如何确定'Usage()'中的T是什么?我需要将T一直传播到另一个API中的方法。这是否意味着我必须建立一个开关? – RecursiveCall

+2

@RecursiveCall在这一点上,我根本不理解。你能否用一个你想要完成的具体的伪代码例子来扩展你的问题? – lisp