Создайте c# Универсальное определение Типа во времени выполнения

Хорошо, если обе Ваших машины подключены по LAN затем, необходимо смочь получить доступ машине окон с помощью Browse Network опция в наутилусе.

И имеют чтение https://help.ubuntu.com/10.04/serverguide/samba-ad-integration.html

Или пытаются использовать connect to server и используют протокол доли самбы для соединения

smb:// ip-address-of-windows-machine

enter image description here

14
задан Cœur 1 July 2018 в 15:02
поделиться

1 ответ

MakeGenericType - т.е.

Type passInType = ... /// perhaps myAssembly.GetType(
        "ConsoleApplication2.Program+Person")
Type t = typeof(List<>).MakeGenericType(passInType);

Для полного примера:

using System;
using System.Collections.Generic;
using System.Reflection;
namespace ConsoleApplication2 {
 class Program {
   class Person {}
   static void Main(){
       Assembly myAssembly = typeof(Program).Assembly;
       Type passInType = myAssembly.GetType(
           "ConsoleApplication2.Program+Person");
       Type t = typeof(List<>).MakeGenericType(passInType);
   }
 }
}

Как предлагается в комментариях - чтобы объяснить, List <> - это открытый универсальный тип - например, « List без какого-либо конкретного T » (для нескольких универсальных типов вы просто используете запятые - например, Dictionary <,> ). Если указан T (либо с помощью кода, либо с помощью MakeGenericType ), мы получаем общий тип closed - например, List .

При использовании MakeGenericType любые ограничения универсального типа по-прежнему применяются, но просто во время выполнения, а не во время компиляции.

34
ответ дан 1 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: