SORU
13 NİSAN 2010, Salı


C# ‘anonim türleri başka bir derlemede bildirilen’ erişemiyor özellikleri dinamik

Kod feryat iyi ClassSameAssembly aynı mecliste sınıfı Programı olarak Dersim var olduğu sürece çalışıyor. Ama sınıf ClassSameAssembly montaj ayırmak için hareket edince çalışma zamanı hata var. Bunu çözmek için para mı?

using System;

namespace ConsoleApplication2
{
    public static class ClassSameAssembly
    {
        public static dynamic GetValues()
        {
            return new
            {
                Name = "Michael", Age = 20
            };
        }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            var d = ClassSameAssembly.GetValues();
            Console.WriteLine("{0} is {1} years old", d.Name, d.Age);
        }
    }
}

CEVAP
13 NİSAN 2010, Salı


Sorun anonim tür olarak oluşturulan inanıyorum cildin gerçekten yok yani internal, "" Bu konuda gibi.

Yerine ExpandoObject kullanmayı deneyin:

public static dynamic GetValues()
{
    dynamic expando = new ExpandoObject();
    expando.Name = "Michael";
    expando.Age = 20;
    return expando;
}

Biliyorum bu biraz çirkin, ama iyi aklıma şu anda... bilmiyorum aklınıza bile bir nesne başlatıcı ile, çünkü sırasında kesinlikle yazılmış olarak ExpandoObject derleyici olmayacak bu ne demek oluyor "Adı" ve "Çağ". Sanaolabilirbunu yapabilmek için:

 dynamic expando = new ExpandoObject()
 {
     { "Name", "Michael" },
     { "Age", 20 }
 };
 return expando;

ama bu çok da iyi değil...

Olabilirpotansiyel olarakuzantısı yöntemi yansıma yoluyla aynı içeriği ile bir expando için anonim bir tür dönüştürmek için yazıyorum. Sonra yazabilirsiniz:

return new { Name = "Michael", Age = 20 }.ToExpando();

Çok berbat oldu :(

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • Incredible Tutorials

    Incredible T

    27 EKİM 2006
  • Photoshop Training Channel

    Photoshop Tr

    13 Temmuz 2012