Заполняющий общий объект, который, как известно, является массивом во время выполненияC#

Место общения программистов C#
Ответить
Anonymous
 Заполняющий общий объект, который, как известно, является массивом во время выполнения

Сообщение Anonymous »

У меня есть общий метод, который возвращает тип t (generic). В методе, если t является массивом, я хочу создать и заполнить этот массив данными и возвращать. Теперь у меня есть список объектов этого базового типа).
Я не могу понять, как поднять этот список в массив, а его тип T. Я мог бы построить массив с отражением, но я все еще не знаю, как его поднять в общий, даже когда они будут такими же типами. /> Ниже приведен какой -то упрощенный пример кода того, что я пытаюсь сделать. Указанная линия не будет компилироваться («не может преобразовать объект типа '[]» в «t»), но в конечном итоге я хочу достичь.static void Main(string[] args)
{
Console.WriteLine("Hello, World!");

Testing test = new Testing();
DataClass[] output = test.MyMethod();
}

public class DataClass
{
public int I = 0;
public DataClass()
{

}
}

public class Testing
{
public T MyMethod()
{
T result = default(T);
if (typeof(T).IsArray)
{
Type? baseType = typeof(T).GetInterfaces()
.Where(o => o.IsGenericType
&& o.GetGenericTypeDefinition() == typeof(System.Collections.Generic.IEnumerable))
.Select(o => o.GetGenericArguments()[0]).FirstOrDefault();
if (baseType != null)
{
List items = new List();
for (int i = 0; i < 5; i++)
{
// Just example code here to populate the array...
items.Add(Activator.CreateInstance(baseType));
}

result = (T)items.ToArray(); //

Подробнее здесь: https://stackoverflow.com/questions/796 ... at-runtime
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»