기존 코드에서 유니버설 클래스 라이브러리를 만들고 있는데, 그 컴파일러의 수명을 위해 컴파일러 경고를 받는다.어떻게 Marshal.SizeOf (Object)를 Marshal.SizeOf로 바꿀 수 있습니까? <T>()?
나는 다음과 같은 코드가 있습니다
코드 빌드,하지만
void SomeMethod(Object data)
{
var size = Marshal.SizeOf(data);
...
}
유니버설 프로젝트 (그리고, 내 생각, .NET 4.5.1 이상 프로젝트) 나는 다음과 같은 컴파일러 경고를 받게에서 :
경고 CS0618 : 'System.Runtime.InteropServices.Marshal.SizeOf (object)'가 사용되지 않음 : 'SizeOf (개체)가 향후 릴리스에서 사용하지 못할 수 있습니다. 대신 SizeOf <T>()을 사용하십시오.
위의 경우 일반 매개 변수가없는 방법 Marshal.SizeOf<T>()
을 사용하여 Marshal.SizeOf(Object)
의 대체품을 어떻게 만듭니 까? 이론적으로 어떤 유형이 data
인지 전혀 알지 못합니다.
Marshal.SizeOf(Object)
을 사용하는 것은 그것이 Obsolete
으로 간주 되었기 때문에 나쁜 관행으로 간주됩니까? 그리고 take-home 메시지는 실제로 "코드를 완전히 리팩터링"해야합니다.
확실히 4.5.1에서 사용되지 없습니다. .NET 네이티브 사전 컴파일러의 목에 통증이 있기 때문에 범용 참조 어셈블리에서 특히 쓸모 없게되었습니다. SomeMethod를 일반적인 것으로 만들 수없는 이유는 분명하지 않습니다. 그렇게 할 수 없다면 .NET 네이티브 툴체인도 문제가 발생할 것입니다. –
답변을 삭제했습니다. [SizeOf (T) on MSDN] (http://msdn.microsoft.com/en-us/library/vstudio/dn261467(v=vs.110) .aspx)을 참조하십시오. 그것은''과 매개 변수를 취합니다. 거기에 물건을 건네면 제대로 측정됩니다. Marhal.SizeOf
귀하의 모든 도움에 감사드립니다, @quetzalcoatl 및 NemanjaBoric. 나는 그 'SizeOf' 과부하를 놓치기를 바보처럼 느낍니다. 나는 그것을 시험해보고 그것이 나의 필요에 얼마나 잘 맞는지 보게 될 것이다. –