2014-03-30 32 views
0

這裏是從我LinqPad代碼片段:分配給struct數組裏面的方法在C#中不起作用?

public class Elephant{ 
    public int Size; 
    public Elephant() 
    { 
     Size = 1; 
    } 
} 

public struct Ant{ 
    public int Size; 
} 

private T[] Transform2AnotherType<T>(Elephant[] elephantList) 
      where T:new() 
{ 
     dynamic tArray = new T[elephantList.Length]; 
     for (int i = 0; i < elephantList.Length; i++) 
     { 
      tArray[i] = new T(); 
      tArray[i].Size = 100; 
        //tArray[i].Dump(); 
     } 

    return tArray; 
} 

void Main() 
{ 
    var elephantList = new Elephant[2]; 
    var elephant1 = new Elephant(); 
    var elephant2 = new Elephant(); 
    elephantList[0] = elephant1; 
    elephantList[1] = elephant2; 
    elephantList.Dump(); 

    var r = Transform2AnotherType<Ant>(elephantList); 
    r.Dump(); 
} 

我想改變已知類型,Elephant的一個目的數組,以類型T的T另一個目的陣列不是class,但限於struct其 由T型股一些共同財產已經存在API.And每個實例提供,說:Size,而且還擁有自己的特別財產 我在我的例子code.So省略了,我把dynamic關鍵字Transform2AnotherType<T>內。 我甚至無法使用Dump來確定作業是否已生效,因此將丟棄RuntimeBinderException

我的問題是:如何正確地在這樣的結構數組中賦值並正確返回它?

+1

的LINQPad作者已經回答了你的問題上轉儲()[這裏](http://linqpad.uservoice.com/forums/18302-linqpad-feature -suggestions/suggestions/1126079-can-dump-work-on-dynamic-objects):使用'LINQPad.Extensions.Dump(dyn)'語法而不是'dyn.Dump()'。 –

回答

1

我建議改變你這樣的代碼:

public class Elephant 
    { 
     public Elephant() 
     { 
      Size = 1; 
     } 

     public int Size { get; set; } 
    } 

    public struct Ant 
    { 
     public int Size { get; set; } 
    } 

    private static T[] Transform2AnotherType<T>(Elephant[] elephantList) 
       where T : new() 
    { 
     T[] tArray = new T[elephantList.Length]; 
     for (int i = 0; i < elephantList.Length; i++) 
     { 
      dynamic arrayElement = new T(); 
      arrayElement.Size = 100; 
      tArray[i] = arrayElement; 
      //tArray[i].Dump(); 
     } 

     return tArray; 
    } 

    static void Main() 
    { 


     var elephantList = new Elephant[2]; 
     var elephant1 = new Elephant(); 
     var elephant2 = new Elephant(); 
     elephantList[0] = elephant1; 
     elephantList[1] = elephant2; 
     //elephantList.Dump(); 

     var r = Transform2AnotherType<Ant>(elephantList); 
     //r.Dump(); 
    } 
+0

'Ant'數組仍然有值0,而不是預期的100. – zionpi

+0

我更改了代碼嘗試這個新代碼 – Milad

+0

仍然無法理解爲什麼struct數組沒有賦值效果。 – zionpi

相關問題