C# 传递通用列表<&燃气轮机;在C中#
我在这件事上快死了;我根据特定的类别(c1、c2、c3…)定义了几个列表。我有一个方法可以处理这些列表上的信息。我想做的是传入特定列表,但让方法接受泛型列表,然后通过typeof确定要做的特定工作。我知道这是可能的,但我似乎无法在方法方面获得正确的语法。例如:C# 传递通用列表<&燃气轮机;在C中#,c#,generics,list,C#,Generics,List,我在这件事上快死了;我根据特定的类别(c1、c2、c3…)定义了几个列表。我有一个方法可以处理这些列表上的信息。我想做的是传入特定列表,但让方法接受泛型列表,然后通过typeof确定要做的特定工作。我知道这是可能的,但我似乎无法在方法方面获得正确的语法。例如: List<c1> c1var; List<c2> c2var; List<c3> c3var; some_method(c1var); some_method(c2var); some_method(
List<c1> c1var;
List<c2> c2var;
List<c3> c3var;
some_method(c1var);
some_method(c2var);
some_method(c3var);
class some_thing
some_method(List<> somevar)
if typeof(somevar).name = x then
esle if typeof(somevar).name = y then....
typeof(MemoryStream) == typeof(Stream); // evaluates to false
new MemoryStream() is Stream; //evalutes to true
列表c1var;
c2var清单;
c3var清单;
某些方法(c1var);
一些_方法(c2var);
一些_方法(c3var);
给学生上课
some_方法(列出somevar)
如果typeof(somevar).name=x,则
如果typeof(somevar).name=y,则。。。。
如何设置该方法的参数列表
提前谢谢
R.Sanders您还需要将
某些方法
声明为通用方法
void SomeMethod<T>(List<T> someList)
{
if (typeof(T) == typeof(c1))
{
// etc
}
}
void SomeMethod(List someList)
{
如果(类型(T)=类型(c1))
{
//等
}
}
在参数部分输入列表,然后尝试输入代码
开关(typeof(T){case-typeof(int):break;})
小心使用typeof(typ1)=typeof(typ2)。这将测试类型是否等效,而不考虑类型层次结构
例如:
List<c1> c1var;
List<c2> c2var;
List<c3> c3var;
some_method(c1var);
some_method(c2var);
some_method(c3var);
class some_thing
some_method(List<> somevar)
if typeof(somevar).name = x then
esle if typeof(somevar).name = y then....
typeof(MemoryStream) == typeof(Stream); // evaluates to false
new MemoryStream() is Stream; //evalutes to true
检查对象是否属于某一类型的更好方法是使用“is”关键字。一个例子如下:
public static void RunSnippet()
{
List<c1> m1 = new List<c1>();
List<c2> m2 = new List<c2>();
List<c3> m3 = new List<c3>();
MyMeth(m1);
MyMeth(m2);
MyMeth(m3);
}
public static void MyMeth<T>(List<T> a)
{
if (a is List<c1>)
{
WL("c1");
}
else if (a is List<c2>)
{
WL("c2");
}
else if (a is List<c3>)
{
WL("c3");
}
}
publicstaticvoid RunSnippet()
{
列表m1=新列表();
列表m2=新列表();
列表m3=新列表();
MyMeth(m1);
MyMeth(m2);
MyMeth(m3);
}
公共静态无效MyMeth(列表a)
{
如果(是列表)
{
WL(“c1”);
}
else if(是列表)
{
WL(“c2”);
}
else if(是列表)
{
WL(“c3”);
}
}
Quick question,你为什么不重载一些方法来接受特定类型的列表,而不是使用typeof呢?小心这样使用typeof。这将检查类型是否完全相同,而不考虑类型层次结构。因此,类似MemoryStream和Stream的内容将不会计算为相同的类型(typeof(MemoryStream)==typeof(Stream)计算为false)。这可能是需要的,但需要注意。使用“is”关键字是计算类型的典型方法,因为“MemoryStream is Stream”将计算为true,因为它们共享相同的对象层次结构。