last day (19 days later) » 

15:50
0
Q: Вопрос по дженерикам и боксинге

ArtemЯ хочу "оптимизировать" стандартный метод HasFlag структуры Enum, но в виде дженерика. вот что получилось: public static bool HasAnyFlag<T>(this T value, T flag) where T : IBinaryInteger<T> { return (value & flag) != T.Zero; //просто 0 тут нельзя поставить } public static bool HasFlag<T>(thi...

ClrHeapAllocationAnalyzer не обнаруживает в данном коде боксинга.
@iikuzmychov Спасибо за статью, но на самом деле я тут не занимаюсь ничем лишним. Нам всем было заявлено "ох как теперь жизнь наладится" после того как появился NET7 и его новые дженерики. И если твои ожидания рушатся - возникает вопрос: Зачем все эти "нововведения", если они упрощают работу лишь сайто-кодерам которые ложили болт на производительность, на боксинги, на 10разовое копирование данных при неправильном использовании LINQ.
learn.microsoft.com/en-us/dotnet/csharp/misc/… В итоге он даже не позволяет это использовать
В итоге, нет ничего лучше чем просто самому прописывать побитовые операции там где это нужно. Потому что enum создали, а базу под них не подвезли от слова совсем
То есть вы взяли инструмент, не предназначенный для вашей задачи, и начали ныть, что сайто-кодеры плохие. Я вас правильно понял?
Перечисления (Enum) в дотнете не реализуют интерфейс IBinaryInteger. Поэтому странно, как вообще мог возникнуть этот вопрос. Посмотрите в документации, какие интерфейсы они реализуют, от этого и отталкивайтесь.
В .NET7 не появились новые дженерики. Появились новые интерфейсы, которые действительно очень полезны и эффективны в некоторых случаях.
Книги Рихтера хороши, но они по .NET Framework. И поэтому частично устарели. В .NET Core было сделано очень много оптимизаций, в том числе и при работе с перечислениями и дженериками. Читайте статьи Тауба (Stephen Toub) на devblogs.microsoft.com.
 
1 hour later…
17:04
Перечисления (Enum) в дотнете не реализуют интерфейс IBinaryInteger. Поэтому странно, как вообще мог возникнуть этот вопрос. Посмотрите в документации, какие интерфейсы они реализуют, от этого и отталкивайтесь. - Ну так энамы всегда использовались бок о бок с побитовыми операциями, и в их основе лежит базовый тип, который все эти интерфейсы реализует. Могли бы и реализовать, чтобы можно было нормально этим всем пользоваться

По поводу джереники это или интерфейсы - прикапывание к моим запятым, так как одного без другого небыло бы, а суть именно в дженериках.

  last day (19 days later) »