Я создаю библиотеку классов Universal из существующего кода и получаю некоторые предупреждения компилятора, с которыми я не могу понять, что с ними делать.
У меня есть такой код:
void SomeMethod(Object data)
{
var size = Marshal.SizeOf(data);
...
}
Код собирается, но в проекте Universal (и, я думаю, в проектах .NET 4.5.1 и выше) я получаю следующее предупреждение компилятора:
предупреждение CS0618: «System.Runtime.InteropServices.Marshal.SizeOf(object)» устарело: «SizeOf(Object) может быть недоступен в будущих выпусках. Вместо этого используйте SizeOf‹T›().
Но как мне создать замену для Marshal.SizeOf(Object)
в приведенном выше случае, используя общий метод без параметров Marshal.SizeOf<T>()
? Теоретически я могу не знать, что такое тип data
?
Это потому, что использование Marshal.SizeOf(Object)
считается плохой практикой, поэтому ему приписывают Obsolete
? И сообщение на вынос действительно должно быть «полный рефакторинг кода»?
<T>
, а также параметр. Вы можете передать туда свой объект, и он будет правильно измерен. Я почти уверен, что вы сможете успешно пройти дажеMarhal.SizeOf<object>(data)
. Престижность NemanjaBoric за указание на это. Я не пишу ответ с этим, так как я не могу проверить (сейчас у меня нет компилятора 4.5.1), действительно ли он работает, но я не понимаю, почему бы и нет, поскольку он принимает конечный объект и может читать его настоящий Тип. - person quetzalcoatl   schedule 25.10.2014SizeOf
перегрузку. Я попробую и посмотрю, насколько хорошо он соответствует моим потребностям. - person Anders Gustafsson   schedule 26.10.2014