için bir C# nesne Unbox için: Böyle bir şey yapmaya çalışıyorum nasıl dinamik tip
void someMethod(TypeA object) { ... }
void someMethod(TypeB object) { ... }
object getObject()
{
if (...) return new TypeA();
else return new TypeB();
}
object obj = getObject();
(obj.GetType()) obj; // won't compile
someMethod(obj);
Açıkçası ben burada karıştı.
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
- - Ben sadece bir koşullu deyimi dışarı yazarak bu işi yapabiliriz biliyorum ama zamanında bunu yapmanın bir yolu yok mu?
EDIT Belki de en iyi tasarım tercihi gibi göründüğüne katılıyorum. Yukarıdaki kodun noktası Mongo DB için Repository taban sınıfıdır. Farklı masa çeşitlerini idare edebilmek istiyorum. Bu nedenle, bazı Meet() aslında kaldır; ve TypeA ve TypeB, ObjectID ve Guid; Alttaki kod, dizgeyi bir dize olarak kabul eden yöntemini agnostik türünün bir parçasıdır; ve getObject(), ID parametresini ayrıştırma yöntemidir.
Sen onunla ilişkili zamanı tür bilgi içeren bir tür 't' conflating edilmektedir (struct'lar olan
TypeA
olmadıkça veTypeB
, yine kutudan çıkarma ... olmayacağını unutmayın) T) '. Onlar aynı şey değiller ve birbirleri için ikame edilemezler. –Daha iyi tasarım seçenekleri olması muhtemeldir, ancak kodun asıl amacını yayınınızdan çıkarmışsınızdır. Belki de bu kodla ne yapmaya çalıştığınızı bize bildirirseniz, size çözümünüzün çözümü için daha iyi ve tamamen farklı bir yol sunabiliriz. –
@Kirk Woll, Farkı biliyorum, sadece ne yapmaya çalıştığımı göstermek istedim. – McGarnagle