Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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>';没有定义的T类型_C# - Fatal编程技术网

C# 如何存储类型为';类<;T>';没有定义的T类型

C# 如何存储类型为';类<;T>';没有定义的T类型,c#,C#,我遇到了一点困难,我不知道如何最好地解决这个问题 我编写了一个类,该类期望在创建新实例时指定数据类型。与存储指定类型的许多项的System.Collections.Generic.List类非常相似。但是,我的类没有与列表类相同或类似的功能 创建我的类的新实例时,例如: string phrase = "Some string type data."; MyClass<string> data = new MyClass<string>( () => phrase

我遇到了一点困难,我不知道如何最好地解决这个问题

我编写了一个类,该类期望在创建新实例时指定数据类型。与存储指定类型的许多项的
System.Collections.Generic.List
类非常相似。但是,我的类没有与
列表
类相同或类似的功能

创建我的类的新实例时,例如:

string phrase = "Some string type data.";
MyClass<string> data = new MyClass<string>( () => phrase );
// How it should be done. But not what I need.
string phrase1 = "Hello Phrase 1.";
string phrase2 = "Hello Phrase 2.";

List<MyClass<string>> list = new List<MyClass<string>>();

list.Add(new MyClass<string>( () => phrase1) );
list.Add(new MyClass<string>( () => phrase2) );
正如您所见,我不知道如何使用不同的传递数据类型存储MyClass的许多元素,如果它们都是相同的传递数据类型,我就不会有这个问题

例如:

string phrase = "Some string type data.";
MyClass<string> data = new MyClass<string>( () => phrase );
// How it should be done. But not what I need.
string phrase1 = "Hello Phrase 1.";
string phrase2 = "Hello Phrase 2.";

List<MyClass<string>> list = new List<MyClass<string>>();

list.Add(new MyClass<string>( () => phrase1) );
list.Add(new MyClass<string>( () => phrase2) );
//应该怎么做。但不是我需要的。
字符串短语1=“你好短语1。”;
string phrase2=“你好短语2。”;
列表=新列表();
添加(新的MyClass(()=>phrase1));
添加(新的MyClass(()=>phrase2));
如果这是我想要完成的,我不会有问题,但因为我想完成我在最后一个例子之前举例说明的,我只是不知道如何最好地完成它

基本上,这是我的问题,我提供了一些基本的例子,因为我认为我的问题可能有点奇怪,老实说,我认为我的术语是不够的


这对你们中的一些人来说可能很简单。感谢您的帮助。

通常,您会为泛型类型创建一个非泛型基类(或接口):

abstract class MyClass // Or interface
{
    // Anything useful but non-generic here
}

class MyClass<T> : MyClass
{
    // Anything using T
}
抽象类MyClass//或接口
{
//这里有什么有用但非通用的吗
}
类MyClass:MyClass
{
//任何使用T的东西
}
然后您可以创建一个
列表
。当然,要访问
MyClass
中的任何成员,您需要知道要转换到的
T
,但我认为这是不可避免的


当然,如果你不控制
MyClass
,它也没有提供一个有用的基类,那么这并没有多大帮助。但是C语言中没有任何东西可以帮助你解决这种情况。

以后可以使用
is
来确定对象的实际类型,或者它总是只对基类(或接口)“求值”吗?@tisont.:“is”以后会很好的,是的。这里没有进行类型擦除:)@JonSkeet:我考虑过创建一个
列表
,这样我可以传递其中的任何信息,然后在查看列表时将其整理出来,但我希望这里的人会有更好的主意。您的方法似乎就是其中之一,如果我没记错的话,
List
本身最初使用的是您的逻辑过程。@JonSkeet:我只是来感谢您,并说您的方法工作得很好,并且按照预期工作。毕竟不需要
列表
。谢谢