Есть ли в C# общий эквивалент класса Java Class?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли в C# общий эквивалент класса Java Class?

Сообщение Anonymous »

В Java Class является универсальным, что полезно, если мне нужен ограниченный параметр; например:

Код: Выделить всё

public void foo(Class> clazz) {
...
}

foo(Integer.class) // OK!
foo(Object.class) // Error - does not implement Comparable
Эквивалентом C# является Type, но он не является универсальным, то есть вы не можете ограничивать параметры; например:

Код: Выделить всё

public void Foo(Type clazz) {
...
}

Foo(typeof(int)) // OK!
Foo(typeof(object)) // OK!
Думаю, одним из решений может быть передача типа в качестве общего параметра; например:

Код: Выделить всё

public void Foo() where T : IComparable {
typeof(T)
}

Foo() // OK!
Foo() // Error - does not implement IComparable
Это единственный подход или есть что-то более эквивалентное подходу Java, другими словами, есть ли что-то вроде Type в C#?
Обновление
Я вернулся, чтобы снова задать этот вопрос. Причина в том, что я обнаружил случай, когда общее решение не работает.< /p>
Приведенный выше код отлично работает, если вы используете один тип; например:
Java

Код: Выделить всё

public void foo(Class> clazz) {
...
}
Эквивалент C#

Код: Выделить всё

public void Foo() where T : IComparable {
typeof(T)
}
Однако это перестает работать, если вам нужно перечисление совместимых типов; например:
Java

Код: Выделить всё

public void foo(Iterable

Подробнее здесь: [url]https://stackoverflow.com/questions/73818082/does-c-sharp-have-a-generic-equivalent-of-javas-classt[/url]
Ответить

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

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

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

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

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