Sto costruendo una libreria di classe universale dal codice esistente, e ricevo alcuni avvisi del compilatore che io per tutta la vita non riesco a capire cosa fare con.Come posso sostituire Marshal.SizeOf (Object) con Marshal.SizeOf <T>()?
Ho codice in questo modo:
void SomeMethod(Object data)
{
var size = Marshal.SizeOf(data);
...
}
Il codice costruisce, ma nel progetto diuniversale (e, immagino, .NET 4.5.1 e progetti superiori) ottengo il seguente avviso del compilatore:
avvertimento CS0618: 'System.Runtime.InteropServices.Marshal.SizeOf (oggetto)' è obsoleto: 'SizeOf (Object) potrebbe non essere disponibile nelle versioni future. Utilizzare invece SizeOf <T>().
Ma come si crea un sostituto per Marshal.SizeOf(Object)
nel caso di cui sopra con il metodo dei parametri-meno generico Marshal.SizeOf<T>()
? In teoria, potrei non avere idea di quale sia il tipo data
?
È perché l'utilizzo di Marshal.SizeOf(Object)
è considerato una cattiva pratica che è stato attribuito Obsolete
? E il messaggio da portare a casa dovrebbe davvero essere "refactoring del codice completamente"?
Certamente non è obsoleta in 4.5.1. Immagino che sia stato reso obsoleto in particolare nell'assemblaggio di riferimento universale perché è un problema al collo per il compilatore in anticipo di .NET Native. Non è chiaro il motivo per cui non si può semplicemente rendere SomeMethod generico. Se non è possibile, la toolchain di .NET Native può causare anche problemi. –
Ho rimosso la mia risposta. Vedere [SizeOf (T) su MSDN] (http://msdn.microsoft.com/en-us/library/vstudio/dn261467 (v = vs.110) .aspx). Ci vuole "" e anche un parametro. Puoi passare il tuo oggetto lì, e verrà misurato correttamente. Sono abbastanza sicuro che dovresti riuscire a passare anche 'Marhal.SizeOf
Grazie per tutto il tuo aiuto, @quetzalcoatl e NemanjaBoric. Sciocco da parte mia perdere questo sovraccarico di 'SizeOf'. Farò un tentativo e vedere come si adatta alle mie esigenze. –