2015-02-10 3 views
0

Я хочу, чтобы получить значение Rectangle, как вы можете видеть на картинке ниже,Как я могу получить к этому имуществу?

enter image description here

Я сделал некоторые прибегая к помощи, но единственное, что я могу найти то, что я могу получить доступ к свойству, но не объект,

I need to access a non-public member (Highlighted Item) of a Combo Box

Я использую Aspose.Pdf.Cell кстати.

+1

Это личное по причине. Возможно, вам захочется описать, что вы намерены выполнить, изменив его. Как правило, когда элемент является частным и имеет отношение к компоновке или компоновке, использование отражения или других методов для прямого изменения значения не будет иметь предполагаемого эффекта. –

+0

@WilliamCustode просто хочет прочитать его ценность - и вот настоящая причина http://www.aspose.com/community/forums/thread/605765/as-we-have-processparagraphs-now-can-we-get-rectangle -out-of-cell-now.aspx – Mathematics

+0

Вопрос, с которым вы связались, возвращает объект свойств с отражением, что с этим не работает? – Sayse

ответ

7

Rectangle вот это общественное имущество класса Aspose.Pdf.Text.TextFragment. Таким образом, вероятно, вы можете использовать приведение типа, чтобы получить его:

var fragment = d.Paragraphs[0] as TextFragment; 
if(fragment!=null) 
{ 
    var rect = fragment.Rectangle 
} 

Я не пробовал, но в соответствии с документацией и Paragraphs indexer и Rectangle собственности являются общедоступными. Сообщение «non-public members» в IDE относится к внутреннему массиву объекта Paragrpaphs, к которому обращается через отражение в этом сеансе отладчика.

+0

Отлично, принято за 5 минут – Mathematics

2
var paragraph = d.Paragraphs.FirstOrDefault(); // or [0] if you're not using Linq 
var pInfo = paragraph.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic).FirstOrDefault(p => p.Name == "Rectangle"); 
if(pInfo != null) 
{ 
    var val = pInfo.GetValue(paragraph) as Rectangle; // or whatever the actual type of that property is 
} 

Использование отражения позволяет вам читать и записывать значения, к которым у вас может не быть доступа. Единственное предостережение здесь в том, что он не может быть частным членом.

Но если это свойство является общедоступным, как описано выше, вы должны абсолютно пройти через открытый API объекта, а не делать это.

0

Как отметил Вильгельм-Кустоде, взаимодействие с частными объектами может иметь непреднамеренные побочные эффекты, поскольку они часто становятся частными по причине. Однако иногда это необходимо для отладки или тестирования. Если вам необходимо получить доступ к значению одного из них, вы можете сделать это с помощью механизмов отражения, как показано ниже:

using System; 
using System.Reflection; 

public class Example 
{ 
    public int PublicProp { get { return 10; } } 

    private int PrivateProp { get { return 5; } } 
} 

public class Program 
{ 
    public static void Main() 
    { 
     Example myExample = new Example(); 

     Console.WriteLine("PublicProp: " + myExample.PublicProp); 

     PropertyInfo[] properties = typeof(Example).GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

     foreach (PropertyInfo prop in properties) 
     { 
      Console.WriteLine(prop.Name + ": " + prop.GetValue(myExample)); 
     } 

     Console.ReadKey(); 
    } 
} 
Смежные вопросы