[英]Template list creation C#
public static void GenerateRandomd<T>(D_List<T> list, int size, Random rand)
{
if (list is D_List<int>)
{
for (int i = 0; i < size; i++)
list.Push_Back(rand.Next(0, 10000));
}
else if (list is D_List<string>)
{
for (int i = 0; i < size; i++)
list.Push_Back(Gen_rand_string(rand));
}
else
{
for (int i = 0; i < size; i++)
list.Push_Back(rand.NextDouble());
}
}
Hello?你好? Is it possible to implement something like this.
是否有可能实现这样的事情。 Thank you in advance.
先感谢您。
You just need to cast list
variable withpattern matching :您只需要使用模式匹配强制转换
list
变量:
public static void GenerateRandomd<T>(D_List<T> list, int size, Random rand)
{
switch (list)
{
case D_List<int> il:
for (int i = 0; i < size; i++)
il.Push_Back(rand.Next(0, 10000));
break;
case D_List<string> sl:
for (int i = 0; i < size; i++)
sl.Push_Back(Gen_rand_string(rand));
break;
default:
for (int i = 0; i < size; i++)
(list as D_List<double>).Push_Back(rand.NextDouble());
}
}
Or you can cast it directly in your code:或者你可以直接在你的代码中转换它:
public static void GenerateRandomd<T>(D_List<T> list, int size, Random rand)
{
if (list is D_List<int>)
{
for (int i = 0; i < size; i++)
(list as DList<int>).Push_Back(rand.Next(0, 10000)); // cast variable to the DList<int> at each step of the cyclecast
}
else if (list is D_List<string>)
{
for (int i = 0; i < size; i++)
(list is D_List<string>).Push_Back(Gen_rand_string(rand));
}
else
{
for (int i = 0; i < size; i++)
(list is D_List<double>).Push_Back(rand.NextDouble());
}
}
If default scenario implies a different type so you may implement non-generic Push_Back(double value)
method for D_List
.如果默认情况意味着不同的类型,那么您可以为
D_List
实现非通用Push_Back(double value)
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.