Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何存储类型T_C# - Fatal编程技术网

C# 如何存储类型T

C# 如何存储类型T,c#,C#,如果列表/字典(例如,dictionary)可以是任何内容,并且没有任何限制,那么将T存储在列表/字典(例如,dictionary)中的等价物是什么 我有一个method(stringsomestring)形式的方法。在这个方法中,我需要保存字符串和T,以便以后使用。另一个方法(来自另一个API)将使用字符串和T。这将在稍后的Task.Run中发生(我认为这与此无关) 此类定义中没有,因为类本身不存储与t相关的任何内容 编辑:这是流程: 在我的代码中的某个地方: public void MyMe

如果列表/字典(例如,
dictionary
)可以是任何内容,并且没有任何限制,那么将
T
存储在列表/字典(例如,
dictionary
)中的等价物是什么

我有一个
method(stringsomestring)
形式的方法。在这个方法中,我需要保存字符串和
T
,以便以后使用。另一个方法(来自另一个API)将使用字符串和T。这将在稍后的Task.Run中发生(我认为这与此无关)

此类定义中没有
,因为类本身不存储与
t
相关的任何内容

编辑:这是流程:

在我的代码中的某个地方:

public void MyMethod(string someString){…}

稍后,如果满足某些条件,则在代码的其他地方(不一定在MyMethod类中)


public void SomeMethodFromAnotherAPI(string someString)

我建议研究C#中的泛型。这就是C#实现模板化的方法


您可能还试图简单地存储该类型。此时您需要使用的方法或关键字来获取类型

你的意思是这样的:

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");
}
Dictionary dict=new Dictionary();
公共void方法(字符串文本)
{
dict.Add(text,typeof(T));
}
公共用途()
{
方法(“字符串”);
方法(“清单”);
方法(“行动”);
}
void TheirMethod(字符串文本){}
void MyMethod(字符串文本)
{
动作动作=()=>他们的方法(文本);
//现在可以返回操作,
//用它构造一个线程
//将其添加到列表中。。。
变量线程=新线程(新线程开始(操作));
thread.Start();
}

我不知道SE用于某些东西(元数据?)。它似乎编辑了from方法(string someString),这改变了它的含义。使用Backticks将其添加为代码-请参阅我的编辑:)当您说“供以后使用”时,您的意思是在静态变量中吗?另外,如果先用
调用该方法,然后再用
调用该方法,那么这两个数据结构是共享的还是分开的呢?你能提供一个你如何看待API语法的例子吗,即你想使用的方法,他们应该怎么做呢?字典或某种存储是问题的解决方案这一概念使你无法描述问题的实质。在字典中存储
T
的等价物正是你所建议的:
Dictionary
。我看不出这个问题。也许可以添加一些代码示例来澄清它?您如何准确地确定
用法()中的T是什么?我需要将T一直传播到另一个API中的方法。这是否意味着我必须构建一个交换机?@RecursiveCall此时我一点也不明白。您是否可以用一个具体的伪代码示例来扩展您的问题,说明您试图实现的目标?没错,这也会起作用。我会记下来的。非常感谢。
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();
}