2016-08-16 5 views
0

Итак, у меня есть объект типа SvgElement, который содержит значение SvgPath (которое наследует SvgElement). Вот код.Вставить объект в значение с другим базовым типом (унаследованным) C#

SvgElement createdElement; 
//other operations. createdElement now has other data of SvgPath 

if (createdElement.GetType() == typeof(SvgPath) & createdElement.ElementName == "path" && storedValue != "") 
createdElement.PathData = SvgPathBuilder.Parse(storedValue); 

return createdElement 

(Примечание: это делается в единстве, .net 2.0 должны быть приняты во внимание, как Единство обижается на System.Linq)

Теперь SvgPathBuilder.Parse принимает string и возвращает объект типа SvgPathSegmentList в PathData. PathData обычно является переменной в пределах SvgPath, но я изменил SvgElement, чтобы временно принять значение, чтобы я знал, будет ли что-то еще, что я тестировал.

Теперь, когда я предоставил вам информацию о предыстории. Как я могу написать (так, что SvgPathBuilder.Parse будет храниться в SvgPath.PathData, а не в виде унаследованной базы данных SvgElement PathData?

(не уверен, если название подходит вопрос, пожалуйста, сообщите)

+0

Как насчет отливки: '(createdElement as SvgPath) .PathData = SvgPathBuilder.Parse (storedValue);' – rlee

+0

Works. Вы заслуживаете печенья. – Robokitty

+0

Вы говорили о дженериках, и остановились на простом кастинге, тем не менее, сделали контрольную проверку Null, что является наиболее вероятной проблемой в этом случае. Если ему не назначена действительная память/инициализация, тогда будет исключение ссылки Null –

ответ

0

Это не очень понятно, что вы пытаетесь добиться от простого описания, но рассмотрят следующую конструкцию, которая по-прежнему нуждается в дальнейших изменениях в соответствии с точными требованиями

Важные детали:

  • SvgElement сделали аннотацию с абстрактным свойством, которое должно осуществляться ребенком, т.е. SvgPath
  • Общие ограничения, используемые в TestSVG для обеспечения, мы всегда поставляем правильный класс или его производный вариант, в этом классе вы можете осуществить заполнение свойств PathData

    public abstract class SvgElement 
        { 
         public abstract List<SvgPath> PathData { get; set;} 
        } 
    
        public class SvgPath : SvgElement 
        { 
         public override List<SvgPath> PathData { get; set;}  
        } 
    
        public class TestSvg<T> where T:SvgElement 
        { 
    
        } 
    
+0

Это не то, что я ищу сейчас, так как я просто приписываю жюри код, но когда я вернусь, чтобы переписать код, это будет полезно. Спасибо. – Robokitty

+0

Это необходимо для дальнейшего импровизации на основе точного прецедента, в настоящее время это грубая форма базы, на мой взгляд, из вопроса –

+0

Приносим извинения за недоразумение, я некоторое время работал над этим (другие его части) и нуждался в исправление, которое только исправлено. Слишком много недель в этом проекте моего .. – Robokitty

1

Вы можете бросить элемент в SvgPath: (createdElement as SvgPath).PathData = SvgPathBuilder.Parse‌​(storedValue);

+0

Это простое решение общей проблемы, которая меня съела. Спасибо. – Robokitty