2015-12-24 15 views
11

Dizinin Length özelliğini bazı tekniklerle değiştirmek mümkün mü?Array's Length özelliğini ayarlama

bir yöntemi için bir dizinin ilk x üye geçmek gerekir. Proje gereksinimleri herhangi yığın ayırma yüzden herhangi Array.Resize() kullanabilir veya yeni bir dizi oluşturamıyor tahsis engelliyor.

Ayrıca SetVertices kodu başka bir kitaplığa ait olduğu için kodunu değiştiremiyorum. V[]'a ihtiyacı var. Ona IList<V> veya V*'u gönderemiyorum. Kod, elbette derlenmeyecektir. Diziyi, daha küçük bir dizi oluştururken olmadan daha küçük olarak gizlemek için yansıma veya uzantı yöntemleri gibi bazı tekniklere ihtiyacım var. SetVertices() yönteminin, dizinin daha fazla olmasına rağmen x üyelerine sahip olduğunu düşünmesini istiyorum.

DÜZENLEME:

şu yaklaşımlar Test ve onlar çalışmaz: o yaratmaz çünkü

  • stackalloc çalışmıyor (ya da ben alamadım) gerçek dizi.
  • mono- projeye atmayı O dizinin uzunluğu özelliği arama GetLenght() ve Getränk() yöntemleri uzunluğunu belirlemek için bir tespit. Kötü bir uygulama olarak, bu yöntemi uzantı yöntemleriyle geçersiz kılabilirim çünkü örnek yöntemler, uzantı yöntemlerine göre önceliğe sahiptir (yoksa aksi halde zorlamak için bir yol var mıdır?).

Gelecek kod enjeksiyonu deneyin.

EDIT2:

Array.GetLength() ve Array.Length içine kodunu yayacak şekilde çalıştı. Çalışma zamanında mevcut bir yöntem gövdesini değiştirmek için kolay, güvenilir, çapraz platform ve temiz bir yol yok gibi görünüyor. Eğer gerçekten maksimum performans ile bunu yapmak varsa

+1

Bence bu imkansız. – dotctor

+3

Herhangi bir anlamlı C# yazmak bir şey ayırmadan yazmak neredeyse imkansız. Ne kadar sıkı, altında yatan sebep nedir? –

+0

"x" aynı kalıyor mu yoksa bir çağrıdan diğerine sık sık değişiyor mu? – alexm

cevap

1

- Kullanmak özellikle CLR (sizin durumunuzda Mono bazı versiyonu gibi görünüyor) için o zaman hafıza düzeni bilmesi gerekir. Ardından dizi uzunluğunu değiştiren ve geri yükleyen bazı güvenli olmayan kodlar yapabilirsiniz. Ama sürdürülebilir değil ve tehlikeli bu. diziler ve x değişen değildir ve sayıları büyük için değilse

+1

Muhtemelen bazı kelimeler kalın yapmalıyım. ** özellikle CLR **, ** sürdürülemez **, ** dangerous ** –

1

, o zaman bir kez global onları ayırmak değil, lokal olarak başladı. Böylece hafızada yatırım yapar ve performans kazanırsınız.

İlgili konular