Тип - безопасно передать имя класса методу

Мне нужно имя класса в методе, например, например X. Между тем, я не хочу потерять безопасность типов, и я не позволю другим разработчикам передавать строку (имя класса) методу.

Что-то вроде этого:

void X( ??? class)//--> don't know how
{
 var className = get the name of class//--> which I don't know how
 Console.WriteLine(className);
}

X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class
5
nl ja de

3 ответы

То, что вы ищете, называется Тип , который содержит метаданные о классах.

Вы можете использовать typeof (класс) или .GetType ( ) для любого экземпляра object .

Другое дело, что typeof разрешается статически и GetType разрешается во время выполнения.

void X(Type type)
{
    Console.WriteLine(type.FullName);
}

X(typeof(tblEmployee));
14
добавлено
@Alireza Извините, я думал, что это экземпляр класса. Исправлена.
добавлено автор Rotem, источник
Поскольку tblEmployee - это класс, а не объект, X (tblEmployee.GetType ()) ошибочен, потому что GetType() может быть вызван на объекты. Вместо этого X (typeof (tblEmployee)) является правильным.
добавлено автор Alireza, источник

Вы можете использовать generics и свойство FullName Тип :

void WriteClassName(TClass item)
  where TClass : class {
    Console.WriteLine(item.GetType().FullName);
}

А затем примените противопоказания к TClass в соответствии с вашими требованиями.

7
добавлено
Нам нужно передать Type, а не объект. В этом случае метод будет принимать объект типа TClass. Я этого не делаю, это то, что мы хотим ...
добавлено автор Gaurav, источник
void X(Type type)
{
    if(type == typeof(DesiredType))
    {
          Do Some Action
    }
}
1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot