SORU
19 NİSAN 2013, Cuma


C arasında ifade farklılıkları ağaç# ve VB.Net

Bir kütüphane ifade ağaçları üzerinde çalışıyor. Kütüphane hem de C ile çalışmak gerekir# VB.Net

İfade ağaçları inşa edilir nasıl dilleri arasında bazı farklılıklar fark ettim

  • Dize karşılaştırma
    () => "a" == "b" Expression.Equals("a", "b") olur
    Function() "a" = "b" Expression.Equals(Expression.Call(CompareString, "a", "b"), 0) olur
    (Burada CompareString kullanır anlıyorum)

  • Dize birleştirme
    () => "a" "b" Expression.Add("a", "b", String.Concat) olur
    Function() "a" & "b" Expression.Call(String.Concat, "a", "b") olur

  • Optimizasyon?
    () => !(1 == 2) Expression.Not(Expression.Equals(1, 2)) olur
    Function() Not (1 = 2) Expression.NotEqual(1, 2) olur

Benim kütüphane tüm bu farklılıkların üstesinden amadikkat etmek lazım fazla bir fark var mı?

Edit Benim kod mu ne bir açıklama.

Birlikte çalıştığım sistem bu şekilde belirttiğiniz belgeler için bir filtre vardır:

var filter = document.Filter;
filter.LeftParanthesis();
filter.Column(columnNumber);
filter.Equals();
filter.Value("abc");
filter.RightParanthesis();
filter.And();
filter.LeftParanthesis();
...
document.Refresh();

İçin daha kolay benim kodu Expression<Func<bool>> lambda olarak filtre belirlemenizi sağlar filtre kullanın.

Expression<Func<bool>> filter = () => (123.AsStringColumn() == "abc") && (...);
filter.Apply(document);

Benim kod bir anlatım ağacı dolaşır ve belge yukarıda belirtilen yöntemler filtre çağırır. Filtre lambda içine koyabilirsiniz her şey için destek yok. Yöntem çağrıları en belirgin olanı.

VB.Net C Bazı durumlarda, yöntem çağrıları oluşturur beri# ben bu yakalamak ve onları farklı şekilde işlemek için gerekli değildir.

CEVAP
5 Mayıs 2013, Pazar


/ bölümü operatör farklı çalışır C# ve VB. C# veri türleri VB her zaman kayan nokta değerleri için işlenen dönüştürürken kullanılan, uyum sağlar:

() => 1 / 2 Expression.Divide(1, 2) olur
Function() 1 / 2 Expression.Divide(Expression.Convert(1, Double), Expression.Convert(2, Double)) olur

VB kayan nokta bölme tamsayı bölme ve / \ operatör C / operatör olarak aynı almak için kullanmak gerekir#.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • Attempts at least

    Attempts at

    1 Ocak 2007
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010